1

integer.MAX_VALUE(2147483647) を 2 で乗算しようとしています。プログラムを実行すると、 integer.MAX_VALUE-2 と表示されます。

なんで-2なの?

4

2 に答える 2

6

最新のコンピューター アーキテクチャの多くは、整数を2 の補数として 2 進数で表します。

それ自体に 2147483647 を追加すると、オーバーフローが発生し、-2 表現になります。

 011111111111111111111111
+011111111111111111111111
-------------------------
 111111111111111111111110

上記から、符号ビット (最初のビット) が 1 になり、負の数を示し、最後のビットを除く他のすべてのビットが 1 であり、2 の補数で -2 を意味することがわかります。

于 2012-09-01T15:39:12.000 に答える
0

符号付きの 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) で試すことです。

于 2012-09-01T15:45:53.240 に答える