このコードは私をたくさん混乱:このビット単位の操作はどのように機能しますか?
bool b = 8 & 7 == 0; //b == false
std::cout << 8 & 7; //Outputs 0
なぜそれはそれを行うのですか?
このコードは私をたくさん混乱:このビット単位の操作はどのように機能しますか?
bool b = 8 & 7 == 0; //b == false
std::cout << 8 & 7; //Outputs 0
なぜそれはそれを行うのですか?
http://en.cppreference.com/w/c/language/operator_precedence
==
ので、あなたが得る&
前/実行に評価されています
bool b = 8 & 7 == 0; //==>
// 7==0 --> 0
// 8 & 0 --> 0 (which is 'false')
// ==> b is false
をあなただけの()
を追加期待するものを取得するには:
bool b = (8 & 7) == 0; // will be evaluated as 'true'
==
が&
よりも優先されますので。その式は0
あなたの問題に等しい
(8 & (7==0))
されています:
8 & (7 == 0);
ので、修正する:
8 & 7 == 0;
がに等しいので、あなたの式は同等です角括弧を明示的に使用します:
(8 & 7) == 0;
評価の順序がわからない場合は、常に括弧を使用してください。
最初の行は= 1000 8、0111 = 7ので、2行目 をcoverredされた、結果は
http://en.cppreference.com/w/cpp/language/予想されるwhic 0でありますoperator_precedence実際には、私は[コンパイラの警告](http://coliru.stacked-crooked.com/a/acc44965f2315b25)を取得します。 – chris
誰があなたにそのようなコードを書くことを教えていますか? – SergeyA