>>>与>>的区别| Java Debug 笔记

294 阅读2分钟

**本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接 **

问题

Java中>>>与>>操作符有什么区别?

------------------------------以下为回答,按支持票数排序----------------------------------

回答1(支持票数450):

>>是算术右移,>>>是逻辑右移。

在算术移位中,将扩展符号位以保留数字的符号性。

例如:用8位表示-2将是11111110(因为最高有效位的权重为负)。使用算术移位>>将其向右移一位,您将得到11111111或-1。但是,逻辑上的右移并不关心该值是否可能表示一个带符号的数字。它只是将所有内容移至右侧,并从左侧填充0。使用逻辑移位将-2右移一位将得到01111111。

回答2(支持票数107):

>>>无符号移位;它将插入0。>>是有符号的,并将扩展符号位。

移位运算符包括左移<<,有符号右移>>和无符号右移>>>

n>>s的结果是带符号的n向右移位s n>>>s的结果是无符号的n向右移位s位。


   System.out.println(Integer.toBinaryString(-1));
    // prints "11111111111111111111111111111111"
    System.out.println(Integer.toBinaryString(-1 >> 16));
    // prints "11111111111111111111111111111111"
    System.out.println(Integer.toBinaryString(-1 >>> 16));
    // prints "1111111111111111"

更清晰的表达:

System.out.println(Integer.toBinaryString(121));
// prints "1111001"
System.out.println(Integer.toBinaryString(121 >> 1));
// prints "111100"
System.out.println(Integer.toBinaryString(121 >>> 1));
// prints "111100"

由于它为正,有符号和无符号移位都将在最左边的位加0。

回答3(支持票数50):

他们都是右移,但>>>为无符号右移

文档中:

无符号右移运算符“ >>>”将一个无符号移位到最左位置,而“ >>”之后的最左位置取决于符号位。