/* 修正前 */ if(c & 2 == 2) /* ←BUG */ /* コンパイラはこう解釈する */ if( c & (2 == 2)) /* 修正例 */ if((c & 2) == 2) 解説 修正例1のように『==』が先に実行されます。 詳細な説明は、 『プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「2.12 優先度と評価順序」Page65 か C-FAQ 3.4J C-FAQ 3.4E を参照して下さい たまに&と&&の違いを知らない人がいる!