13

初歩的な質問で申し訳ありませんが、なぜプラス側にマイナスがあるのですか?

ゼロが保存されていることと関係がありますか?バイナリの可能な限り高い 10 進数を計算するには、2 の累乗を足すだけだと思っていました。3 ビットの符号なしの場合は、

1*2^0 + 1*2^1 + 1*2^2 = 7

同じ規則が Java 整数に適用されるべきではありませんか? ありがとう

4

7 に答える 7

15

0x7fffffffJavaは 2^31-1の max signed int をサポートできるためです。

2^31 = 0x80000000 is negative so Positive is 2^31-1

バイナリ レベルの比較は次のようになります。

10000000000000000000000000000000  --> 2147483648 --> 2^31
01111111111111111111111111111111  --> 2147483647 --> 2^31 -1
^ Sign bit
于 2012-10-12T20:26:04.793 に答える
7

同じルールが適用されます...7です2^3 - 1。はい、それは 0 のためです。:)

対照的に、ネガは-(2^31)

したがって2^31、負の数、 one 0、および2^31-1厳密な正数があり、これらを合計すると...

2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32
于 2012-10-12T20:24:12.523 に答える
6

これは、 2 の補数(ゼロが 2 つ格納されるのを回避する)の利便性のためであり、Java はその表現を使用して数値を格納します。ここを見てください。

于 2012-10-12T20:25:53.010 に答える
5

からまで2^31の負でない数値があります。はい、整数としても格納されます。また、 から までの範囲の負の数があります。02^31-1zero2^31-2^31-1

于 2012-10-12T20:25:14.597 に答える
2

2^32 に分割する必要があります。
1/2 はマイナスです。
0 はプラスでカウントします。
数学では、0 は負でも正でもありません。
.NET と MSSQL で一貫しています。

ネガを含まないセットは unsigned と呼ばれます。
0 を含んでおり、正と呼ぶのは適切ではありません。
バイナリの世界は 0 から始まるため、正の値として扱われます。
ジャック(+1)からの答えには理由があります。

于 2012-10-12T20:24:24.847 に答える
1

n ビットがある場合、2^(n-1) の負の数 (最上位ビットが 1 であるため) と 2^(n-1) の非負の数があります。ゼロは負でない数であるため、最大でもある 2^(n-1)-1 までの正の数があります。

注: 最も負の数に正はありませんので、

-Integer.MIN_VALUE == Integer.MIN_VALUE
于 2012-10-12T20:25:33.883 に答える
0

Java 整数は符号付きの量であるため、符号用に 1 ビットが予約され、値用に 31 ビットが残されます。

于 2012-10-12T20:29:41.320 に答える