This question already has answers here:
Are the shift operators (<<, >>) arithmetic or logical in C?

(11个答案)


5年前关闭。




赫伯特·希尔德(Herbert Schildt)的《 C完全引用》一书说:“(在带符号的负整数的情况下,向右移将导致输入1以便保留符号位。)”

保留符号位有什么意义?

而且,我认为本书所指的是使用符号位而不使用two's complement表示负数的情况。但是即使在那种情况下,推理似乎也没有任何意义。

最佳答案

希尔尔德(Schildt)的书被认为是非常贫穷的书。

实际上,当您右移负号时,C不能保证将1移入。右移负值的结果是实现定义的。

但是,如果将负数的右移定义为以1s移到最高位,则在2s补码表示中,它将表现为算术移位-右移N的结果与除法的结果相同乘以2N,则向负无穷大舍入。

关于c - 为什么C中的右移负数在最左边的位上带来1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17358445/

10-12 16:00