0

重複の可能性:
演算子の優先順位の問題

プレフィックスの優先&&順位は「LOGICAL AND」より高く ( )、「LOGICAL AND」の優先順位は「LOGICAL OR」よりも高い( )ことがわかってい||ます。

以下のプログラムはそれに違反しているようです:

int main()

{
    int i=-3,j=2,k=0,m;
    m=++i||++j&&++k;
    printf("%d %d %d %d",i,j,k,m);
    return 0;
}

の優先順位++がそれ以上&&の場合||、すべてのプレフィックスが最初に実行されます。この後、i=-2,j=3,k=1最初&&に実行されます。出力が次のように表示される理由: -2 2 0 1?

プログラムの動作は、ubuntu v12.04 でも同じです。

4

2 に答える 2

5

&&and演算子は「||ショートサーキット」です。つまり、左側の値が FALSE&&または TRUE の場合||、右側の式は実行されません (式全体の値を決定する必要がないため)。

于 2012-08-28T02:49:00.440 に答える
2

ショートサーキットの定義なので正解です。

m = ++i||++j&&++k

まず、左部分 ++i は常に TRUE であるため、i は -2 になり、式の右部分は実行されず、j,k の値は変化しません。

于 2012-08-28T04:03:49.860 に答える