在16位变量中处理12位有符号值



我有12位带符号的值。在16位变量中存储这个12位有符号值的正确方法是什么?MSB位必须移动到第15位位置?

converted_Temperature = (Tmp_value & (1<<11)) <<4; 
converted_Temperature +=  (Tmp_value & ((1<<11)-1)) * 6.25; 

为了将q12转换为q16 (Q_(number_format)),必须将符号位复制到所有高位(11-15):

   int16_t q12, q16;
   q16 = (q12 & 0x0800) ? (q12 | 0xf800) : q12;

最新更新