1

誰かが私にこれが2ではなく0を出力する理由を説明できますか?ここで起こっているいくつかの単純な(愚かな)間違いがあるに違いありませんが、私はそれを理解することができません。ありがとう。

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 に答える