/* 警告: B:e5673: 『x & 2 == 2』 は『x & (2 == 2)』となり『(x & 2) == 2』とは別です */
/* 修正前 */ 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 を参照して下さい たまに&と&&の違いを知らない人がいる!