1 public class test {
2 public static void main(String[] args) {
3 byte i = -1;
4 System.out.println("i= "+Integer.toBinaryString(i));
5 i>>>=8;
6 System.out.println("i >>>= 8: "+Integer.toBinaryString(i));
7 short j = -1;
8 System.out.println("j= "+Integer.toBinaryString(j));
9 j>>>=8;
10 System.out.println("j >>>= 8: "+Integer.toBinaryString(j));
11 int k = -1;
12 System.out.println("j= "+Integer.toBinaryString(k));
13 k>>>=8;
14 System.out.println("k >>>= 8: "+Integer.toBinaryString(k));
15 ?
16 System.out.println(" "+Integer.toBinaryString(j>>>8));
17 }
18 }
19 ?
20 /**Output:
21 * i= 11111111111111111111111111111111
22 * i >>>= 8: 11111111111111111111111111111111
23 * j= 11111111111111111111111111111111
24 * j >>>= 8: 11111111111111111111111111111111
25 * j= 11111111111111111111111111111111
26 * k >>>= 8: 111111111111111111111111
27 * 111111111111111111111111
28 * */
byte、short、char在做移位运算之前,会被自动转换为int类型,然后再进行运算,然后被截断,赋值给原来的类型。
通过 byte i= -1,i>>>=8 进行说明:
①i由byte类型先转换为int类型
byte类型的i的二进制:1111 1111
int 类型的i的二进制:1111 1111 1111 1111 1111 1111 1111 1111
②进行无符号右移运算
结果为:0000 0000 1111 1111 1111 1111 1111 1111
③再将结果转换为byte类型,会发生截断
结果为:1111 1111
原文:https://www.cnblogs.com/yqsumAll/p/14785304.html