java中没有2进制的数据类型,对二进制的操作,需要使用三种操作符
<< 左移位操作符,算数左移 用来将一个数的二进制位序列左移若干位,高位左移后溢出,舍弃不用,右补0(结果会变大)
>> 右移位操作符,算数右移 用来将一个数的二进制位序列右移若干位,移到右端的低位被舍弃,最高位则移入原来高位的值,左侧用原符号位补齐,负的就填1,正的就填0(结果会变小)
>>> 无符号右移操作符,逻辑右移 用来将一个数的二进制位添零右移若干位,即向右移动若干位,移到右端的低位被舍弃,左侧添零,不管正负。所以它也叫无符号右移
a>>b;
a表示要操作的数
b表示要移的位数
123的32位二进制数: 0000 0000 0000 0000 0000 0000 0111 1011
123 >> 3 右移步骤如下:
0000 0000 0000 0000 0011 1101 右移一位(右移一位表示除2,反之左移一位表示乘2)
0000 0000 0000 0000 0001 1110 右移二位
0000 0000 0000 0000 0000 1111 右移三位 的结果转换成十进制8+4+2+1=15
123 >> 3 == 15
a>>b 等价于 a>>(b%32)
也就是说
a>>32 等价于 a>>>0,移32位等于没移
a>>33 等价于 a>>>1
a>>34 等价于 a>>>2
i <<= 1;//i = i<<1 i等于i乘以2的1次方
i <<= 2;//i = i<<2 i等于i乘以2的2次方
>>就是相除了