14位左对齐的二进制补码
我有两个字节包含一个14位左对齐的二进制补码值,我需要将它转换为有符号的短值(范围从-8192到+8191,我猜?)
最快的方法是什么?
简单地除以4。
(注意,右移会导致实现/未定义的行为。)
便携式解决方案:
short convert(unsigned char hi, unsigned char lo) { int s = (hi << 6) | (lo >> 2); if (s >= 8192) s -= 16384; return s; }
我有两个字节包含一个14位左对齐的二进制补码值,我需要将它转换为有符号的短值(范围从-8192到+8191,我猜?)
最快的方法是什么?
简单地除以4。
(注意,右移会导致实现/未定义的行为。)
便携式解决方案:
short convert(unsigned char hi, unsigned char lo) { int s = (hi << 6) | (lo >> 2); if (s >= 8192) s -= 16384; return s; }