e4.c

シフトのしすぎ!


int val = 0x12345678 ; printf("%X¥n",val << -1) ; printf("%X¥n",val << 32) ; /*↑BUG !! */ printf("%X¥n",val >> -1) ; printf("%X¥n",val >> 32) ; /*↑BUG !! */
解説 32bitシフトすると結果は、不定になります。 詳細な説明は、 プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「付録A7.8 シフト演算子」Page253 を参照して下さい。