二进制移位后的补零规则根据移位方向和数据类型有所不同,具体如下:
一、有符号数移位补零规则
- 正数:高位补0,低位补0(保持符号不变)
- 负数:高位补1,低位补1(保持符号不变)
- 示例:
- $4 rightarrow 100 rightarrow 10 rightarrow 1$(正数右移2位)
- $-4$(补码为$11111100$)右移2位后为$11111010$(即$-2$)
有符号左移
- 高位移出(舍弃),低位补0
- 示例:
- $4 rightarrow 100 rightarrow 10000$(左移2位)
二、无符号数移位补零规则
无符号右移: 无论正负,高位均补0 无符号左移
示例:
$4 rightarrow 100 rightarrow 10$(无符号右移2位)
$4 rightarrow 10000$(无符号左移2位)
三、注意事项
- `int`类型(32位)左移时,每移1位丢弃第31位;`long`类型(64位)每移1位丢弃第63位
- 无符号数移位不会改变数值的正负性
- 负数需先转换为补码形式再移位,移位后需根据符号位还原原码
通过以上规则,可确保移位操作在不同数据类型下保持正确性。