java 中的右移运算符

Right shift operator in java

public class Operator {

    public static void main(String[] args) {
        byte a = 5;
        int b = 10;
        int c = a >> 2 + b >> 2;
        System.out.print(c); //prints 0
    }
}

当5右移2位是1,10右移2位是2那么相加就是3对吗?怎么打印出来0我调试也看不懂

一切都是为了 operator precedence。加法运算符优先于移位运算符。

您的表达方式与:

int c = a >> (2 + b) >> 2;

JavaDocs 中提供的这个 table 将帮助您理解 Java

中的运算符优先级
additive    + -       /\  High Precedence
                      ||
shift   << >> >>>     ||  Lower Precedence 

所以你的表情会是

a >> 2 + b >> 2;
a >> 12 >> 2;   // hence 0

这是你想要的吗?

 int c = ((a >> 2) + b) >> 2; 

你向右移动了 2+b。我假设你想将 5 个位置移动 2 个位置,对吗?

b000101 >> 2   ==   b0001øø
  | |___________________|_|
  |                     |
  |_____________________|

即最左边的位向右移动 2 个位置,最右边的位也向右移动(但它的右侧没有更多有效位置,所以它就消失了),数字变成剩下的 - 在本例中为“1”。如果将数字 5 移动 12 个位置,您将得到零,因为 5 在二进制形式中的位置少于 12 个。在 '5' 的情况下,如果你想保留非零值,你最多可以移动 2 个位置。