我有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;