Java左移和加号的奇怪行为



谁能给我解释一下为什么这将打印0而不是2?这里一定有一些简单的(读起来很愚蠢的)错误,但我想不出来。谢谢。

public class test{
    public static void main(String[] args){
        int result[] = new int[]{0,0,1,0};
        int out = 0;
        for(int i = 0;i < result.length; i ++){
            out = out << 1 + result[i];
        }
        System.out.println(out);
    }
}

这是因为+具有比<<更高的优先级,因此您需要使用括号来强制执行所需的求值顺序:

out = (out << 1) + result[i];

我试着运行这个程序(添加括号):

public class test{
    public static void main(String[] args){
        int result[] = new int[]{0,0,1,0};
        int out = 0;
        for(int i = 0;i < result.length; i ++){
            out = (out << 1) + result[i];
        }
        System.out.println(out);
    }
}

工作……-问题似乎是与操作符优先。+优先于<<

这就是为什么:)

 public static void main(String[] args){
    int result[] = new int[]{0,0,1,0};
    int out = 0;
    for(int i = 0;i < result.length; i ++){
        out = **(out << 1)** + result[i];
    }
    System.out.println(out);
}

注意**是为了让你看到你已经错过了什么

最新更新