假设我有一个用不寻常位数(例如12位)编码的带符号数字,如何将其高效地转换为标准的C值?
以下方法可行但需要一个中间变量:
#include <stdio.h>
int main() {
unsigned short U12=0xFFF; // 12-bit signed number, as coded in hex
unsigned short XT=U12<<4; // 16 bits minus 12 is 4...
short SX=(*(short*)&XT)>>4; // Signed shift. Is that standard C ?
printf("%08X %d\n", SX, SX);
return 0;
}
输出:
U12=0x0: 00000000 0
U12=0x1: 00000001 1
U12=0x7FF: 000007FF 2047
U12=0x800: FFFFF800 -2048
U12=0x801: FFFFF801 -2047
U12=0xFFF: FFFFFFFF -1
是否有更直接的方式来做这件事,而无需中间变量?