本帖最后由 邓宫财 于 2013-4-5 17:30 编辑
这里主要是由于byte在进行位操作的时候系统自动将其转换成int类型,
所以操作结果其实应该为int型,不过由于">>>="这种复合赋值运算符会自动将右边的类型转换到左边的类型。
所以这里应该是发生了隐形的强制类型转换
所以运算步骤就是:
-15 的补码 1111 0001byte型,隐士转成int
-> 1111 1111 1111 1111 1111 1111 1111 0001 然后向右无符号移动2位
-> 0011 1111 1111 1111 1111 1111 1111 1100然后强转回去。
-> 1111 1100结果就是这个,换算就是 -4
下面这个例子就充分证明了,我一上的说法的正确性。- int a = -15; //<span style="background-color: rgb(255, 255, 255);">1111 1111 1111 1111 1111 1111 1111 0001</span>
- a = a>>>2; //<span style="background-color: rgb(255, 255, 255);">0011 1111 1111 1111 1111 1111 1111 1100</span>
- System.out.println(a);
- System.out.println((byte)a);//int强转成byte会丢失,前面24位。然后结果奇迹的就是-4.
复制代码 |