为什么double总是8个字节而int总是4个字节,即使int有更多数字?

时间:2013-06-29 18:01:00

标签: java int double byte

我不明白int 63823是如何占用更少的空间而不是双1.0。在这个特定的实例中,是否没有更多信息存储在int中?

5 个答案:

答案 0 :(得分:7)

  

我不明白int 63823是如何占用更少的空间而不是双1.0。在这个特定的实例中,是否没有更多信息存储在int中?

好问题。当您看到638231.0是基础数据的表示时,您所看到的是,您正在查看基础数据。它经过特殊格式化,以便可以读取它,但 机器如何看待它。

Java使用非常特殊的格式来表示intdouble。您需要查看those representations以了解为什么63823在表示为Java int时占用32位而1.0在表示为Java时占用64位{ {1}}。

特别是,作为Java double的63823是represented

int
Java中的

和1.0 00000000000000001111100101001111 represented

double

如果您想了解更多信息,我建议Two's ComplementWhat Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 1 :(得分:3)

不完全是。双1.0表示更多信息,因为通过将double定义为64位浮点数,它可以可以。要使用您的示例,如果您有一个只能有两个值的特殊数据类型,63823和98321234213474932,那么它只需要1位来表示数字63823,尽管它远不如int有用。

在实现方面,使用固定大小的数据类型通常更容易,更快,因此您可以分配固定的内存块(这就是变量),而不必知道它的值并不断重新分配空间。具有不同方法的变量的示例将是String和BigInteger,它们分配空间以容纳它们的值。请注意,两者在Java中都是不可变的 - 这不是巧合。

答案 2 :(得分:1)

需要在某处定义这些原始数据类型才能使用它们。它不是一个灵活的容器,你可以在任何你想要的东西,而更像是一个瓶子,无论是满还是空,都占用相同的空间。而且它们也有最大值。 自己阅读here.

答案 3 :(得分:0)

未显示的零也计数。大概忽略了数字实际上以二进制而不是十进制存储的事实,当你用两个隐含的零数字写出两个数字时,你得到:

1.0   = 1.00000000000000000*10^0000
63823 = 0000063823

如您所见,1.0是63823的两倍。因此,它需要两倍的存储空间。

答案 4 :(得分:0)

int和double根本没有十进制数字。删除前导零后,十进制表示形式具有8个十进制数字。 int本身有32个二进制数字的空间。双尾在尾数中有53个二进制数字,10位指数和一个符号位。