-7

Q1: 出力?

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

Q2: 出力?

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

Q3: 出力?

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

この操作の仕組みを説明してください。

4

1 に答える 1

2

ブール演算は左から右に処理されます (括弧なし...)。結果が修正されるとすぐに、残りの条件の評価を停止します。これの意味は:

false && (AND) -> is always false, no matter what
true || (OR) -> is always true, no matter what

first case stops @ || (because true && true || doesn't matter)
second case stops @ || (because true || doesn't matter && how much && operations ...)
third case stops @ end (because true && true && -> still have to check because if there would be false, the whole expression would be false)

特定のポイントで停止するため、残りのものに対して ++ 演算子は実行されません。

これは、incr、decr、または状態で何かを行うのに注意する必要がある理由でもあります...

于 2013-06-26T07:40:15.837 に答える