C++ 中 MSB ->LSB 和 LSB->MSB 的有符号 INT 转换
Posted
技术标签:
【中文标题】C++ 中 MSB ->LSB 和 LSB->MSB 的有符号 INT 转换【英文标题】:Signed INT Conversion of MSB ->LSB and LSB->MSB in C++ 【发布时间】:2011-04-10 20:00:59 【问题描述】:我检查了 SWAR 算法 (SIMD Within A Register) 用于反转位顺序unsigned int
s。 signed int
有类似的东西吗?
【问题讨论】:
我真诚地希望这不是拼写 SWAP。签名无关紧要。 非常感谢。是的,我不是故意拼写 SWAP :) 是SWAR
和SIMD Within A Register
一样吗?
【参考方案1】:
该算法仅适用于无符号整数,因为不需要在位移期间进行符号扩展。
由于该算法仅使用二进制表示,而不是数值,您可以只转换为大小相等的无符号整数(它将具有相同的表示),使用该算法,然后转换回有符号。这些转换不会变成任何汇编指令,它们只会导致编译器产生逻辑右移而不是算术右移。
【讨论】:
【参考方案2】:这取决于您将有符号整数的位反转的意思。但是,一般来说,如果您打算将符号位放置在 LSB 位置,并将 LSB 放置在符号位中(这是交换任何内容的正常方法),那么相同的算法可以用于有符号和无符号整数。
如果不是这种情况,请通过反转有符号整数来解释您的意思。
【讨论】:
以上是关于C++ 中 MSB ->LSB 和 LSB->MSB 的有符号 INT 转换的主要内容,如果未能解决你的问题,请参考以下文章