14位左对齐的二进制补码

时间:2013-02-05 15:15:54

标签: c types bit-shift twos-complement

我有两个包含14位左对齐two's complement值的字节,我需要将其转换为有符号的短值(范围从-8192到+8191,我猜?)

最快的方法是什么?

2 个答案:

答案 0 :(得分:4)

简单地除以4。

(注意,右移导致实现/未定义的行为。)

答案 1 :(得分:1)

便携式解决方案:

short convert(unsigned char hi, unsigned char lo)
{
  int s = (hi << 6) | (lo >> 2);
  if (s >= 8192)
    s -= 16384;
  return s;
}