Java 中的 << >> >>> 什么意思?

2019-09-15  

  • <<  表示左移,不分正负数,低位补0
  • >>  表示右移,如果该数为正,则高位补0,若为负数,则高位补1
  • >>> 表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

测试代码: 

System.out.println("16 << 1 : " + (16 << 1));
System.out.println("16 >> 3 : " + (16 >> 3));
System.out.println("16 >> 10 : " + (16 >> 10));
System.out.println("1 >> 1 : " + (1 >> 1));
System.out.println("16 >>> 2 : " + (16 >>> 2));
System.out.println("-16 >> 2 : " + (-16 >> 2));
System.out.println("-16 << 2 : " + (-16 << 2));
System.out.println("-16 >>> 2 : " + (-16 >>> 2));

 打印结果:

16 << 1 : 32
16 >> 3 : 2
16 >> 10 : 0
1 >> 1 : 0
16 >>> 2 : 4
-16 >> 2 : -4
-16 << 2 : -64
-16 >>> 2 : 1073741820

 

简单理解:

  • << 1  相当于乘以2
  • >> 1  相当于除以2
  • >>> 不考虑高位的正负号,正数的 >>> 等同于 >>

 

PS:位移操作涉及二进制、原码、补码、反码相关,可参考:

Java中的<< 和 >> 和 >>> 详细分析

计算机中原码,反码,补码之间的关系

 

ConstXiong 备案号:苏ICP备16009629号-3