1

有人可以向我解释为什么这会打印出 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);
    }
}
4

3 回答 3

7

这是因为+优先级高于<<,因此您需要使用括号来强制执行所需的评估顺序:

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

这是ideone 上演示的链接

于 2013-03-25T02:08:05.923 回答
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);
    }
}

有效... - 问题似乎与运算符优先级有关。+优先于<<

于 2013-03-25T02:09:52.917 回答
1

这就是为什么 :)

 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);
}

请注意,** 是为了让您查看您缺少的内容

于 2013-03-25T02:08:43.313 回答