【问题标题】:14-bit left-justified two's complement to a signed short带符号短的 14 位左对齐二进制补码
【发布时间】:2013-02-05 15:15:54
【问题描述】:

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

最快的方法是什么?

【问题讨论】:

    标签: c types bit-shift twos-complement


    【解决方案1】:

    除以 4。

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

    【讨论】:

      【解决方案2】:

      便携式解决方案:

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

      【讨论】:

      • 我做:x = ((int16_t)((byte[0]
      • 哪个更快取决于编译器。你的通过溢出有符号整数类型 int16_t 表现出未定义的行为。
      • @AlexeyFrunze 这不会编译,你的参数名称不匹配(lo vs low)。
      • @unwind 喜欢它修复代码意味着删除它的一部分,即使是单个字符。 :)
      猜你喜欢
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      相关资源
      最近更新 更多