二进制移位运算分为左移和右移两种类型,具体规则如下:
一、移位运算类型
左移运算符(`<<`) - 规则:
将二进制数的所有位向左移动指定位数,高位移出(舍弃),低位空位补0。 - 示例:`5`(二进制`00000101`)左移2位后为`20`(二进制`00010100`)。
右移运算符(`>>`) - 带符号右移(`>>`):
高位补符号位(正数补0,负数补1),低位移出(舍弃)。 - 无符号右移(`>>>`):高位统一补0,低位移出(舍弃)。 - 示例:
- `5`(二进制`00000101`)右移2位(带符号)为`1`(二进制`00000001`)。 - `5`(二进制`00000101`)右移2位(无符号)为`15`(二进制`00001111`)。
二、特殊规则
移位次数取模:对于`byte`、`short`、`char`等类型,实际移位次数为指定次数与32取余的结果(例如移位33次等同于移位1次)。- 符号位处理:带符号右移会保留原数的符号,无符号右移会将负数转换为正数(通过补码运算)。
三、应用场景
快速除法:左移运算符(`>>`)可快速实现除以2的幂次(如`x >> n`等价于`x / 2^n`),且保留符号位。- 位掩码操作:通过移位与掩码结合实现位级别的逻辑判断。