0

int 63823 が double 1.0 よりも占有するスペースが少ない理由がわかりません。この特定のインスタンスでは、int に格納されている情報はこれ以上ありませんか?

4

5 に答える 5

3

ではない正確に。double 1.0 は、より多くの情報を表します。これは、64 ビット float としての double の定義により、より多くの値が存在する可能性があるためです。あなたの例を使用すると、63823 と 98321234213474932 の 2 つの値しか持てない特別なデータ型がある場合、数値 63823 を表すのに 1 ビットしかかかりませんが、int よりもはるかに役に立ちません。

実装に関しては、多くの場合、固定サイズのデータ​​型を使用する方がはるかに簡単で高速です。そのため、値を知らずにメモリの固定チャンク (変数とは何か) を割り当てることができ、常に領域を再割り当てできます。異なるアプローチの変数の例としては、String と BigInteger があり、これらは値を収容するためにスペースを割り当てます。どちらも Java では不変であることに注意してください。これは偶然ではありません。

于 2013-06-29T18:17:43.603 に答える
1

これらのプリミティブ データ型を使用するには、どこかに定義する必要があります。好きなものを詰め込める柔軟な容器ではなく、中身が入っていても空になっていても同じスペースを取るボトルのようなものです。また、収容できる最大数もあります。詳しくはこちらをご覧ください

于 2013-06-29T18:06:35.247 に答える
1

表示されていないゼロもカウントされます。おおよそ、数値が実際には 10 進数ではなく 2 進数で格納されるという事実を無視して、暗黙のゼロ桁を含めて両方の数値を書き込むと、次のようになります。

1.0   = 1.00000000000000000*10^0000
63823 = 0000063823

ご覧のとおり、1.0 は 63823 の 2 倍の長さです。したがって、2 倍のストレージが必要になります。

于 2013-06-29T18:06:47.220 に答える
0

int と double には、10 進数はまったくありません。intの10 進数表現は、先頭のゼロを削除すると 8 桁になります。int 自体には、2 進数で 32桁のスペースがあります。double には、仮数部に 53 の 2 進数、10 ビットの指数、および符号ビットのためのスペースがあります。

于 2013-06-30T01:49:27.807 に答える