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; }