">>>"逻辑右移,左边添加0
注意 char,byte和short在逻辑右移时会先转换成int,然后在int的基础上逻辑右移。
long型的移位
long型移位很诡异,不知道怎么回事,
long l = -21474837000L;
System.out.println(l);
BitManipulation.pBinLong("l", l);
l >>>= 3;
System.out.println(l);
BitManipulation.pBinLong("l", l);
1111111111111111111111011111100011111111111111111111110111111000
1101111111111111111111111011111111011111111111111111111110111111
如果, l 赋值时为一个int范围内的数,貌似前后32个bit内容一样, 移位也是基于32位移, 前后32位各自分别右移3位
而,如果l赋值为超过int范围的值时, 不知道怎么移位的, 如上例好像在逻辑右移3位, 好像在前后各个32位前移进来110;
而且, 不管逻辑右移还是右移, 得到的二进制数一样, 但是逻辑右移后的数 会解释成无符号数。
why