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 ints。 signed int 有类似的东西吗?

【问题讨论】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于C++ 中 MSB ->LSB 和 LSB->MSB 的有符号 INT 转换的主要内容,如果未能解决你的问题,请参考以下文章

MSB与LSB的含义

MSB与LSB的含义

在 C/C++ 中检查最低有效位 (LSB) 和最高有效位 (MSB) 的值

字节序相关问题简单总结,LSB与MSB

为啥使用 MSB 作为符号位?

FIFO深度