二进制的左移和右移操作是位运算中的基础操作,其核心规则如下:
一、左移操作(`>>`)
操作规则 将二进制数的所有位向左移动指定位数,低位补零。 - 正数:
左侧补0,右侧丢弃。例如:`5 >> 1` → `0000000000000000000000000000010`(即2)。 - 负数:左侧补1(符号位扩展),右侧丢弃。例如:`-8 >> 2` → `11111111111111111111111111111010`(即-2)。
效果 左移n位相当于乘以2的n次方。例如:`5 << 2` → `20`(即5×4)。
二、右移操作(`<<`)
操作规则
将二进制数的所有位向右移动指定位数,高位补零。 - 正数: 左侧补0,右侧丢弃。例如:`5 << 1` → `000000000000000000000000000010`(即10)。 - 负数
效果 右移n位相当于除以2的n次方(向下取整)。例如:`5 >> 2` → `1`(即5÷4)。
三、符号扩展差异
有符号右移:
保留符号位,正数补0,负数补1,适用于需要保持数值符号的场景。- 无符号右移:所有高位补0,适用于非负数场景,会导致负数转换为正数(如`-1 >> 1` → `0xFFFFFFFF`)。
四、应用场景
左移:快速乘以2的幂次,如位移计数、位掩码操作等。- 右移:快速除以2的幂次,如除法优化、位级逻辑处理等。通过理解补码表示法和移位规则,可以高效进行位运算和数值处理。