2012-10-12 15 views
11

これは本当に基本的な質問ですが、申し訳ありませんが正の面でマイナス1があるのはなぜですか?なぜJava 2の最大整数は^ 31 - 1で2ではなく^ 31

ゼロが保存されているかどうかは関係ありますか?私はバイナリのために可能な限り最高の進数を計算すると、ちょうど同じルールがJavaの整数に対して適用しないでください3ビット符号なしのために、それは

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

だろうように、最大​​2つの権限を追加するだろうと思いましたか?ありがとう

+1

[2の補数]のため(http://en.wikipedia.org/wiki/Two's_complement);関連する質問を参照してください:http://stackoverflow.com/questions/3809044/how-many-values-can-be-represented-with-9-bits/3809058#3809058 – NullUserException

+0

神の母、初めてJavaタグに投稿し、このたくさんの反応があります、ありがとうございます! –

答えて

12

Javaは最大符号付き整数を0x7fffffff(2^31-1)としてサポートできるため、

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

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

10000000000000000000000000000000 --> 2147483648 --> 2^31 
01111111111111111111111111111111 --> 2147483647 --> 2^31 -1 
^ Sign bit 
+0

ありがとうございます、これはかなり明確になります –

+1

"Signed bit"は "Sign bit" – Roland

6

同じルールが適用されます... 72^3 - 1です。これとは対照的に0 :)

の、ネガは-(2^31)

に行くので、はい、それはそう2^31負の数、1 0、およびに追加2^31-1厳格な陽性は、ありますです...

2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32 
2

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

ネガを含まないセットに気づかれた場合は、符号なしと呼ばれます。
0が含まれていて、それを正と呼ぶのは適切ではありません。
バイナリワールドは0から始まるので、正の値として扱われます。
Jack(+1)の答えには理由があります。

+1

0は正とはみなされません。便宜上、2の補数の正の数の間に挿入されます。 – Jack

+0

@ NullUserExceptionあなたは正しいです、私はそれをWiki'dし、私の答えを更新しました。 – Paparazzi

3

0から2^31-1までの範囲の負の数である2^31があります。だから、zeroも整数として格納されます。また、-2^31から-1までの2^31の負の数があります。

1

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

注:そこので

-Integer.MIN_VALUE == Integer.MIN_VALUE 
5

それが原因で(二ゼロを格納することを回避する)2の補数の利便性の最も負の数には正でなく、そのrapresentationを使用してJava格納番号。見てくださいhere

0

のJava整数量を締結しているので、1ビットの値に対して31ビットを残して、サインのために予約されています。

関連する問題