我有12位签名值。在16位变量中存储这个12位有符号值的正确方法是什么? MSB位必须移到第15位?
converted_Temperature = (Tmp_value & (1<<11)) <<4;
converted_Temperature += (Tmp_value & ((1<<11)-1)) * 6.25;
答案 0 :(得分:1)
为了将q12转换为q16(Q_(number_format)),必须将符号位复制到所有高位(11-15):
int16_t q12, q16;
q16 = (q12 & 0x0800) ? (q12 | 0xf800) : q12;