二进制右移操作是将二进制数的所有位向右移动指定的位数,具体规则如下:
一、带符号右移(算术右移)
符号位扩展 对于有符号数,右移时左侧空出的位用符号位(最高位)填充。符号位为0表示正数,为1表示负数。
示例说明
以8位二进制数 `00000101`(十进制5)为例,右移1位后变为 `00000010`(十进制2)。若原数为负数(如 `10000011`,十进制-5),右移1位后变为 `11111101`(十进制-3)。
二、无符号右移
直接丢弃左侧位
无符号数右移时,左侧空出的位直接丢弃,右侧用0填充。
示例说明
以8位二进制数 `00000101`(十进制5)为例,右移1位后变为 `00000010`(十进制2)。若原数为 `11111011`(十进制-5,无符号表示为 `4294967191`),右移1位后变为 `00111111`(十进制255)。
三、移位操作符示例
左移操作符(`<<`): 将二进制数整体向左移动n位,右侧用0填充。例如 `00000100 << 2` 结果为 `00010000`(十进制4)。 右移操作符(`>>`)
四、应用场景
乘除法优化
左移n位相当于乘以2的n次方,右移n位相当于除以2的n次方。例如 `c = a << 4` 等价于 `c = a * 16`。
位掩码与权限控制
通过移位操作可以快速设置或清除特定位。例如 `0b10000001 & 0b00000010` 可以提取第3位,`0b10000001 | 0b00000001` 可以设置第3位为1。
注意事项
有符号数和无符号数的移位行为不同,需根据数据类型选择正确的移位方式。
移位操作可能引发数据溢出,需谨慎使用。