【问题标题】:Signed INT Conversion of MSB ->LSB and LSB->MSB in C++C++ 中 MSB ->LSB 和 LSB->MSB 的有符号 INT 转换
【发布时间】:2011-04-10 20:00:59
【问题描述】:

我检查了 SWAR 算法 (SIMD Within A Register) 用于反转位顺序unsigned ints。 signed int 有类似的东西吗?

【问题讨论】:

  • 我真诚地希望这不是拼写 SWAP。签名无关紧要。
  • 非常感谢。是的,我不是故意拼写 SWAP :)
  • SWARSIMD Within A Register 一样吗?

标签: c++ bit-manipulation reverse swar


【解决方案1】:

该算法仅适用于无符号整数,因为不需要在位移期间进行符号扩展。

由于该算法仅使用二进制表示,而不是数值,您可以只转换为大小相等的无符号整数(它将具有相同的表示),使用该算法,然后转换回有符号。这些转换不会变成任何汇编指令,它们只会导致编译器产生逻辑右移而不是算术右移。

【讨论】:

    【解决方案2】:

    这取决于您将有符号整数的位反转的意思。但是,一般来说,如果您打算将符号位放置在 LSB 位置,并将 LSB 放置在符号位中(这是交换任何内容的正常方法),那么相同的算法可以用于有符号和无符号整数。

    如果不是这种情况,请通过反转有符号整数来解释您的意思。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2013-05-17
      • 2011-11-09
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多