e5674.c

結合力は(4)?


/*B:e5674: このビット演算は 演算順序が分かりにくいです(『a<<b-c』は『a<<(b-c)』となり『(a<<b)-c』とは別です)*/

/* 修正前 */ printf("%x ¥n", 1 << 7 + 1 ) ;
/* 修正例1(上記式と同じ結果) */ printf("%x ¥n", 1 << (7 + 1)) ;
/* 修正例2(<<を優先する場合) */ printf("%x ¥n",(1 << 7)+ 1 ) ;

解説 結合力の問題で、修正例1、2どちらを意図しているのか 分かりづらいです。 括弧を付加して修正例のように意図を明確にして下さい */ 詳細な説明は、 プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「2.12 優先度と評価順序」Page65C-FAQ 3.4J C-FAQ 3.4E を参照して下さい。