C言語なら俺に聞け! Part 110
■ このスレッドは過去ログ倉庫に格納されています
0680デフォルトの名無しさん
2005/07/12(火) 03:51:21int が 32bit な環境だと、INT_MAX は 0x7fffffff = 2145483647 になる。
i*=2 を繰り返していくと、いずれ i は 0x40000000 = 1073741824 になる。
この状態でさらに i*=2 をすると、i は 0x80000000 になるが、これは符号付整数では -2147483648 になってしまう。
だから while の i < INT_MAX で終了できない。
さらに i*=2 をすると、i は 0x100000000 になり、32bit の範囲を超えてしまい、結果の下 32bit = 0x00000000 = 0 が
残り、以降 i = 0 のままループを繰り返す。
■ このスレッドは過去ログ倉庫に格納されています