2017-02-01 8 views
2

if(!(s&i))とif(s&i == 0)の違いは何ですか?

int main(){ 
    int s = 4, i = 3; 
    if(s & i == 0) cout << (s & i) << endl; 
    if(!(s & i)) cout << (s & i) << endl; 
    return 0; 
} 

出力は1だけです。 なぜ2つのゼロを印刷したり印刷したりしないのですか?

+0

ありがとう、私はそれを取得します。私はオペレータの優先順位を忘れているかもしれません。 – yeates

答えて

7

==は、&よりも高い優先度を持ちます。だから、

if (s & i == 0) 

は、言い換えれば

if (s & (i == 0)) 

に実際に等価であるi0、その後&sと結果(0または1)をINGのであれば、あなたがチェックしています。あなたはおそらく望みました

if ((s & i) == 0) 
4

最初の条件

if(s & i == 0) cout << (s & i) << endl; 

は、私はあなたが

if((s & i) == 0) cout << (s & i) << endl; 
012を意味すると思います。この状態

if(s & (i == 0)) cout << (s & i) << endl; 

に相当し、この状態

if(!(s & i)) cout << (s & i) << endl; 

と共通のものを持っていません

この場合、両方の条件は同じです。

4

等価比較演算子(==)はビット単位のAND演算子(&)よりも高い優先順位を有し、第1の式と等価である:iため

if(s & (i == 0)) cout << (s & i) << endl; 

3に設定されている、(i == 0)は、falseでありますこれはビット単位でand'edのとき0に変換されます。 4 & 00と等しいため、何も印刷されません。

関連する問題