私は32ビットと64ビットを調べていました。 32ビットに格納できる整数値の範囲は±4,294,967,295
ですが、Java int
も32ビット(私が間違っていない場合)で、最大値は±2 147 483 648
です。 long
の場合と同じことですが、0 to ±2^63
の値を格納しますが、64ビットの値は±2^64
の値を格納します。どのようにこれらの価値が異なるのでしょうか?Java整数の整数が32ビットまたは64ビットをすべて使用しないのはなぜですか?
答えて
Javaの整数はであり、という符号が付いています。したがって、そのビットが正か負かを示すために予約されています。 1
と対応する最小の負の値である - 表現がNビットで表される正の最大値を
( - 1)2 ^(N)によって与えられる、このアプローチでは"two's complement notation."呼ばれ(2 ^(N - - 1))
によって与え
正および負の境界に "オフ・バイ・ワン" の態様ゼロによるものです。ゼロはスロットを占有し、偶数の負の数と奇数の正の数を残します。表現された値を円のマークとして—のように時計の表面に表示すると、—は、ゼロが負の範囲よりも正の範囲に多く含まれることがわかります。言い換えると、正の並べ替えとしてゼロを数える場合は、正と負の値の範囲でより多くの対称性が見つかります。
この表現を学ぶには、小さくしてください。 、たとえば、3ビットを取ると表現することができるすべての数値書き出し:
- -4
- -3
- を - 2
- -1
これらの数値のそれぞれを定義する3ビットシーケンスを記述できますか?それを行う方法を理解したら、もう一度試してみてください。そこから、32ビットまたは64ビットまでの拡張方法を想像してください。
このシーケンスは「ホイール」を形成します。ここでは、それぞれが前のものに1を加えて形成され、3から-4までの回り込みがあります。そのラップアラウンド効果(減算でも起こりうる)は"modulo arithemetic."
どうもありがとうございました。今、私は分かる :)。 –
個人的には、私はいつもそれを単なる多項式b_ {n-1} * 2^{n-1} + b_ {n-2} * 2^{n-2} + .. + b_ { 0} * 2^0'であり、bは0または1であり、nはワード幅である。署名付きと署名なしの違いは、最初の用語が否定的であるかどうかだけです。 – Voo
良い説明、@Voo。理解しやすいが形式的ではない定義では、上位ビットが1の場合、残りのビットの意味は変更されずに、8ビット数の場合は-128となります。これは '11111111'が-1である理由を説明しています。これは、 '01111111'、または127、プラス-128に相当します。繰り返しますが、あなたの定義と同じですが、*混乱する可能性は低いです。ちなみに、私はTeX表記に感謝します。 – seh
32ビットでは、2^32の値を格納できます。これらの値を0〜4294967295または-2147483648〜+ 2147483647と呼ぶのはあなた次第です。この違いは、「符号付きタイプ」対「符号なしタイプ」と呼ばれます。言語Javaは、int
の署名タイプのみをサポートしています。他の言語では、符号なし32ビット型の型が異なります。
" - "部分にはもう1つのビットが必要なので、laguageは±4294967295の32ビットタイプを持ちます。
ご注文を「すぐに使える」ようにするには、署名された範囲で行かなければなりません。 – yshavit
Java int
が署名されているためです。署名用に1ビット必要です。
- 1. 64ビット環境での32ビット整数のパフォーマンス(C++)
- 2. 64ビットCPUで一般的な操作に32ビット整数を使用する理由はありますか?
- 3. 32ビット整数のビット操作
- 4. minSdkVersion正の32ビット整数
- 5. 符号付き32ビット整数を符号なし32ビット整数に変換する方法は?
- 6. C++の8ビット整数と32ビット整数のビット単位の論理和
- 7. Rubyで2つの32ビット整数に64ビット整数を格納する方法
- 8. は整数()キャストは、Delphi 64ビット
- 9. 64ビットと32ビットのUbuntuと低メモリシステム - なぜUbuntu 64ビットが私のRAMを食べるのですか?
- 10. 2つの32ビット整数を乗算して64ビット整数を生成するにはどうすればよいですか?
- 11. readline.hは32ビットのubuntuではなく64ビットですか?
- 12. cmpxchgの64ビット整数の例
- 13. 読み込んで32ビットまたは64ビットJNIライブラリのJava
- 14. 2 64ビット整数のSSE乗算
- 15. これは32ビットまたは64ビットのJVMですか?
- 16. JDK 64ビットまたは32ビット?
- 17. BigIntegerクラスを使用してJavaで符号なし64ビット整数を実装する方法は?
- 18. JavaScriptで32ビット浮動小数点数または64ビット長を実装していますか?
- 19. 64ビットPythonで32ビットdllまたはexeを使用できますか?
- 20. 32ビット整数が範囲外の量だけ移動した
- 21. C#の方が速い:32ビットまたは64ビットのビルド?
- 22. 2つの16ビット整数を指定すると、それらのビットをインターリーブして1つの32ビット整数を形成できますか?
- 23. 64ビットOSで32ビットSTSを使用できますか?
- 24. 64ビット整数型から__m64をロードしますか?
- 25. 32ビットDLLを使用する64ビットJavaアプリケーション
- 26. 32ビット/ 64ビットOS?
- 27. ナンシー32ビットまたは64ビットはありますか?
- 28. uniform_int_distribution <uintmax_t>は62ビット数では機能しますが、63ビットまたは64ビットでは機能しないのはなぜですか?
- 29. 64ビットOS上の32ビットまたは64ビットアプリケーション?
- 30. 64ビットマシン上のSQL Server 2012 32ビットまたは64ビット?
と呼ばれます。署名されたJavaのプリミティブを使用して、符号なしの値を格納できます。 Javaはこれをサポートしていませんが、ほんのわずかな回避策ではうまく動作します。明らかに、符号なしの型をサポートする言語では、そのような回避策は必要ありません。 –
2^64の負の値と2^64の正の値を格納するには、2 * 2^64または2^65または65ビットを格納するものが必要です。 2^63負または負以外の値を格納するには、2 * 2^63または64ビットが必要です。 –