位移运算符
想象一个数字:5的二进制
- 十进制:5
- 二进制:
00000101(为了直观,我们用8位表示)
1. 左移(<<)
规则:所有数字往左挤,右边空出来的位补0。
口诀:左移1位 = 乘以2,左移2位 = 乘以4,以此类推。
例子:
5 << 1:
00000101→ 往左挤1位 →00001010(结果是10,即5×2=10)5 << 2:
00000101→ 往左挤2位 →00010100(结果是20,即5×4=20)
动图想象:
[5] → [5 0] → [5 0 0](每次左移相当于在右边加一个0)
2. 右移(>>)
规则:所有数字往右挤,左边空出来的位补原来的符号位(正数补0,负数补1)。
口诀:右移1位 = 除以2并向下取整。
例子:
- 正数:
20 >> 2
00010100→ 往右挤2位 →00000101(结果是5,即20÷4=5) - 负数:
-8 >> 2
-8的二进制是11111000(补码表示)→ 往右挤2位 →11111110(结果是-2,即-8÷4=-2)
3. 无符号右移(>>>):强行补0
规则:无论正数负数,左边统统补0。
结果:负数会变成正数!
例子:
-8 >>> 2
-8的二进制是11111000→ 往右挤2位并补0 →00111110(结果变成62!符号位被0覆盖了)
一句话总结
<<:左移乘2,右边补0。>>:右移除2,负数补1,正数补0。>>>:右移除2,统统补0(Java专属)。
现在试试?
如果x = 3,那么:
x << 2= 12(3×4)x >> 1= 1(3÷2向下取整)
试试看对不对?

浙公网安备 33010602011771号