二进制数移位运算分为左移和右移两种类型,具体规则如下:
一、左移运算(`<<`)
操作规则 将二进制数的所有位向左移动指定的位数,空出的高位用0补充。 - 正数:
直接左移,低位补零
- 负数:先取绝对值的补码,左移后减1得到反码,再取反码得到补码
示例 - `5 (0101)` 左移2位 → `20 (10100)`
- `-8 (-1000)` 左移2位 → `11111111111111111111111111111110`(补码表示)
数学关系
左移n位相当于乘以2的n次方,例如 `a << b = a * 2^b`
二、右移运算(`>>`)
有符号右移(算术右移)
- 正数: 直接右移,高位补零 - 负数
无符号右移 无论正负,右移时高位补零。若移出位为1,则补1(符号位不变)
示例
- `5 (0101)` 右移1位 → `2 (0010)`
- `-5 (-0101)` 有符号右移1位 → `-3 (-0111)`
- `-5` 无符号右移1位 → `2147483647 (01111111111111111111111111111101)`(32位int最大值)
三、注意事项
数据类型限制: 移位操作仅适用于整数类型(如 `int`、`long`),且移位位数通常不超过数据类型的位数(如32位或64位) 符号位处理
通过以上规则,可以正确进行二进制移位运算。