符号付き整数型に対する署名はどこに保存されていますか? (Javaでは)
-
13-09-2019 - |
質問
例えばJavaデータ型のバイトは、ストレージ上の単一のバイトで-128から127にデータを保持します。 その割り当てられたストレージたobverデータ型を取ることになる余分なデータを必要とする0〜127から-128まで1 - 間distingushすることができるようにします。確かにそれだけで1ビット余分にかかるだろうが、それはまだオーバーになります。
Javaはこれをどのように行うのですか?
解決
プリミティブ型は、すべてのマシン上の、すべての実装で同じになるように定義され、2の補数整数の様々なサイズ、シングル及び倍精度IEEE 754標準の浮動小数点数、boolean型、およびAされていますUnicode文字char型。 - の Java言語仕様:はじめにする の
あなたは128であるから、0から255までの整数としてそれを想像することができます。の常にの差し引きます。
の詳細な技術:整数(及びます)、そのビットを反転し、いずれかを添加することによって(正→負またはその逆)否定することができます。これは、( 1の補数のようにのほとんどのです単純にすべて反転するビットを-ので、補完しかし、1の補数は、それが二つの異なるゼロという問題点があります。。+0と-0を2の補数は、これを解決(浮動小数点数は、あまりにも、他の理由とより有用☺のためということがあります)一方を添加し、それによって負の値の範囲を拡張することにより(これは、理由はそれですの -128 の.. 127)。
のいくつかのようにのあなたは記号が実際に番号の最初のビットに「保存」されていることを言うことができます。だから、ストレージの1ビットを必要とする、あなたの観察が正しいです。しかし、(正または負の符号を無視して)byte
の数値範囲は、7ビットのみを必要とするので、あなたは再びバイトを持っています。