c - 为什么右移有两个选项? (算术/逻辑)

标签 c bit-manipulation bit-shift

为什么右移有两种选择——附加符号位(算术右移)或附加 0(逻辑右移),为什么实现要选择哪个?

最佳答案

不同之处在于允许处理有符号(二进制补码)和无符号整数。

  • 当右移一个有符号(二进制补码)整数时 最高有效位是符号; 0 表示正数或零,1 表示 消极的。为了保留右移的标志,必须 复制现有的高位,或者附加符号 更喜欢。

  • 右移无符号整数时,为了保留 正确的幅度必须在左边附加零,不管 现有的高位。

关于c - 为什么右移有两个选项? (算术/逻辑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16976843/

相关文章:

对结构数组感到困惑并在 C 中调整大小

c - 在 C 中打印一个带有两位小数但没有尾随零的 float

c - 如何解决我的位移 C 代码中的以下错误?

c++ - 位移效率

c - 二元加法

C 中的循环移位,意外行为

c - 相同的 C 代码表现不同

对#define 预处理器指令的好奇心

c - 十进制到二进制转换器无法计算大于 1023 的小数

javascript - svelte 如何使组件变脏