二进制数据的移位操作分为左移和右移两种类型,具体规则如下:
一、左移操作(`<<`)
操作规则 将二进制数的所有位向左移动指定的位数,空出的位用0填充。
- 例如:`5 >> 1`(5的二进制`00000101`右移1位)结果为`00000010`(即2)。
应用场景
左移常用于乘以2的幂次方,例如`a << n`相当于`a * 2^n`。
二、右移操作(`>>`)
右移操作分为两种类型:逻辑右移和算术右移,需根据数据类型判断填充方式。
1. 逻辑右移(无符号数填充0)
规则: 空出的位用0填充,保持符号位不变。 示例
2. 算术右移(有符号数填充符号位)
规则:空出的位用符号位(最高位)填充,保持数值符号不变。
示例:
`00000100`(十进制4)算术右移2位结果为`00000001`(十进制1);
`10000100`(十进制-128)算术右移2位结果为`11100001`(十进制-64)。
三、注意事项
数据类型影响
- 无符号数移位时,符号位始终为0;有符号数移位时,符号位可能改变(尤其是算术右移)。
- 例如:`-1`(二进制`11111111`)左移1位结果为`11111110`(按补码规则),而逻辑右移1位结果为`01111111`(无符号数行为)。
位移位数
- 位移位数通常由操作数后缀或运算符指定(如`a >> n`),不足高位用0或符号位填充。
溢出风险
- 左移可能导致数值溢出(如`int`类型左移超过31位),需注意数据类型限制。
通过以上规则,可灵活实现二进制数据的左移和右移操作。