i = -1;
System.out.println(i);
System.out.println(Integer.toBinaryString(i));
i >>>= 10;
System.out.println(Integer.toBinaryString(i));
System.out.println(i);
i = -1;
i >>= 10;
System.out.println(Integer.toBinaryString(i));
System.out.println(i);
输出:
-1
11111111111111111111111111111111
无符号右移10位,高位填充0,结果变成了正数。
1111111111111111111111
4194303
有符号右移10位,高位填充1,结果仍然是-1。
11111111111111111111111111111111
-1
另外,对于short, byte,char这些类型,系统自动转换为int,然后进行移位操作。
如果是 >>= 或者是 <<= 这些操作符号,注意移位完毕再赋值回去的时候有截断操作,从int的32位截取右边低16位赋值回去,这可能不是想要的结果。
short b = -1;
b >>>= 10;
b首先被转换位int 的-1,然后无符号右移10位,然后截取低16位赋值回去给b,结果仍然是-1。 |
|