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つのゼロを印刷したり印刷したりしないのですか?
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つのゼロを印刷したり印刷したりしないのですか?
==
は、&
よりも高い優先度を持ちます。だから、
if (s & i == 0)
は、言い換えれば
if (s & (i == 0))
に実際に等価であるi
が0
、その後&
s
と結果(0または1)をINGのであれば、あなたがチェックしています。あなたはおそらく望みました
if ((s & i) == 0)
最初の条件
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;
と共通のものを持っていません
この場合、両方の条件は同じです。
等価比較演算子(==
)はビット単位のAND演算子(&
)よりも高い優先順位を有し、第1の式と等価である:i
ため
if(s & (i == 0)) cout << (s & i) << endl;
が3
に設定されている、(i == 0)
は、false
でありますこれはビット単位でand'edのとき0
に変換されます。 4 & 0
は0
と等しいため、何も印刷されません。
ありがとう、私はそれを取得します。私はオペレータの優先順位を忘れているかもしれません。 – yeates