我不明白int 63823是如何占用更少的空间而不是双1.0。在这个特定的实例中,是否没有更多信息存储在int中?
答案 0 :(得分:7)
我不明白int 63823是如何占用更少的空间而不是双1.0。在这个特定的实例中,是否没有更多信息存储在int中?
好问题。当您看到63823
和1.0
是基础数据的表示时,您所看到的是,您不正在查看基础数据。它经过特殊格式化,以便你可以读取它,但不 机器如何看待它。
Java使用非常特殊的格式来表示int
和double
。您需要查看those representations以了解为什么63823
在表示为Java int
时占用32位而1.0
在表示为Java时占用64位{ {1}}。
特别是,作为Java double
的63823是represented :
int
Java中的和1.0 00000000000000001111100101001111
为represented:
double
如果您想了解更多信息,我建议Two's Complement和What 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位指数和一个符号位。