中級 › ビット演算子 & の優先順位が比較演算子 == より低いことによる誤動作 › パターン1
ビット演算子 & の優先順位が比較演算子 == より低いことによる誤動作
a & b == cと書くと、==の方が優先順位が高いため、a & (b == c)として解釈されます。
1 #include <stdio.h> 2 3 int main(void) { 4 int flags = 6; 5 int mask = 2; 6 if (______________________) { ^ 7 printf("yes\n"); 8 } else { 9 printf("no\n"); 10 } 11 return 0; 12 }
出力: no期待: yes
空欄を埋めてコンパイル・実行を通す
==は&よりも優先順位が高いため、flags & mask == maskはflags & (mask == mask)として解釈されます。ビット演算と比較を混ぜるときは括弧で明示的にグループ化する必要があります。
次の問題