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

时间:2014-05-31 12:32:29

标签: variables signed shift unsigned-integer

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

converted_Temperature = (Tmp_value & (1<<11)) <<4; 

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

1 个答案:

答案 0 :(得分:1)

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

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