java 有三种移位运算符操作 分别是 >>(有符号右移) ,>>>(无符号右移) 和<<(左移) ,下面分别对这三种操作需要注意的地方做个简单的说明:
1、>> :
num>>1 的意思是符号位不变,丢弃最低位 左边补符号位
举例: 2>>1 等于1 , -2>>1等于-1
2、 >>>
num>>>1的意思是丢弃最低位高位补0
举例:2>>>1 等于1 ,-2147483648(int类型的最大值,最高位符号位为1)>>>1 等于1073741824
注意:在用>>>右移是一定注意负数的情况
3、<<
num<<1 的意思丢弃最高位 低位补0
举例 :1<<1 的意思是将num的二进制代码整体向左移动一位(即等于乘2操作)。-1<<1 等于-2
注意:如果移动的位数超过了该类型的最大位数,编译器会对其进行取模操作 例 1<<33 等于1<<1
如果移进符号位 则会引起符号位变化 例 1<<31等于 -2147483648