c++能对负数进行移位运算吗

来源:百度知道 编辑:UC知道 时间:2024/06/07 00:26:31
我先用~1+1得出-1(0x11111111),然后再对-1进行移位操作(>>1),这样按道理应该得出0x7fffffff,但结果不是这样,我得到的还是-1(0xffffffff),谁能告诉我为什么

在汇编里移位分算数移位和逻辑移位两种。
你这里的右移明显是算数右移,也就是说,在每次向右移动后,补进的永远是“符号位”。对于正数补进的是0,对于负数补进的就是1。

带符号的数和无符号的数C++会做不同处理,如果你想得到无符号移位,先将表达式强制转换为无符号类型,然后再移位(汇编中移位也有算数移位和逻辑移位两种指令)