java 移位

时间:2023-03-10 03:17:37
java 移位

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次方

>>就是相除了