因为数据在计算机存储的时候是用补码存储,所以注意区分正数和负数的区别。一共32位。
一、左移位并赋值(<<=)正数负数都是右边补0
- 例如:
a=9 ,b=2;a<<=b
输出结果:a=36;b=2
- 原因:
9的二进制是1001,向左移动两位,是100100,再转换为十进制数是36
a<<=b相当于a=a<<b
所以:a=36,b=2
二、右移位并赋值(>>=) 正数左边补0,负数左边补1
- 例如:
a=-9 ,b=2;a>>=b
输出结果:a=-3;b=2
- 原因:
-9的二进制是0111,向右移动两位,是1101,再转换成真值(减1取反)0011,再转换为十进制数是-3
所以:a=-3,b=2
三、无符号右移位并赋值(>>>=) 不管正负都是左边补0
- 例如:
a=-9 ,b=2;a>>>=b
输出结果:a=1073741821;b=2
- 原因:
-9的二进制是11111111 11111111 111111111 11110111(32位),向右移动两位,是00111111 11111111 111111111 11111101,再转换为十进制数是1073741821
所以:a=1073741821,b=2