integer.MAX_VALUE
(2147483647) を 2 で乗算しようとしています。プログラムを実行すると、 integer.MAX_VALUE
-2 と表示されます。
なんで-2なの?
integer.MAX_VALUE
(2147483647) を 2 で乗算しようとしています。プログラムを実行すると、 integer.MAX_VALUE
-2 と表示されます。
なんで-2なの?
最新のコンピューター アーキテクチャの多くは、整数を2 の補数として 2 進数で表します。
それ自体に 2147483647 を追加すると、オーバーフローが発生し、-2 表現になります。
011111111111111111111111
+011111111111111111111111
-------------------------
111111111111111111111110
上記から、符号ビット (最初のビット) が 1 になり、負の数を示し、最後のビットを除く他のすべてのビットが 1 であり、2 の補数で -2 を意味することがわかります。
符号付きの 32 ビット整数。0111 1111 1111 1111 1111 1111 1111 1111 ※2 1111 1111 1111 1111 1111 1111 1111 1110
最初のビットは符号を表します。オーバーフローにより符号が変化します。
1111 1111 1111 1111 1111 1111 1111 1110 は -2
http://en.wikipedia.org/wiki/Integer_%28computer_science%29
私がお勧めするもう 1 つの実験は、unsigned int (uint) で試すことです。