我不明白int 63823如何比double 1.0占用更少的空间。在这个特定的实例中,是否没有更多的信息存储在int中?为什么double总是8个字节,int总是4个字节,即使int有更多的数字?
回答
我不明白int 63823是如何占用比double 1.0少的空间。在这个特定的实例中,是否没有更多的信息存储在int中?
好问题。当你看到63823
和1.0
是表示的底层数据时,你看到的是你看到底层数据的而不是。它是专门格式化的,以便你可以读取它,但它是而不是机器如何看到它。
Java使用非常特殊的格式来表示int
和double
。您需要查看those representations以了解为什么63823
在表示为Java int
和1.0
时需要六十四位,因为它表示为Java double
。
特别地,如63823在Java中int
是represented为:
00000000000000001111100101001111
和1。0为double
是represented在Java作为:
0011111111110000000000000000000000000000000000000000000000000000
如果你想探索更多,我建议Two's Complement和What Every Computer Scientist Should Know About Floating-Point Arithmetic。
这些原始数据类型需要定义在某处供您使用。它不是一个灵活的容器,你可以随心所欲地装入东西,而更像是一个瓶子,无论是空的还是空的,都可以使用相同的空间。而且他们也有最大的限制。 更多了解自己here.
未显示的零也计数。大约,忽略这些数字实际上是存储在二进制,而不是十进制,当你写与隐含的零位包括这两个数字,你会得到这样的事实:
1.0 = 1.00000000000000000*10^0000
63823 = 0000063823
正如你所看到的,1.0是两倍长为63823.因此它需要两倍的存储空间。
匿名downvoter可能已经得到了一些反对我的教学方法,嗯? – Joni
不完全。 double 1.0表示更多的信息,因为通过将双精度定义为64位浮点数,可以得到更多的值,它可以是可能是。要使用你的例子,如果你有一个特殊的数据类型只能有两个值,63823和98321234213474932,那么只需要1位来表示数字63823,尽管它比int小得多。
在实现方面,使用固定大小的数据类型通常更容易和更快速,因此您可以分配固定的内存块(这是一个变量),而不必知道它的价值和不断变化重新分配空间。具有不同方法的变量的例子是String和BigInteger,它们分配空间来容纳它们的值。请注意,两者在Java中都是不可变的 - 这不是巧合。
+1讨论为什么我们想要固定大小的数据类型。 – selig
int和double根本没有小数位。除去前导零点后,int的十进制表示形式有8位十进制数字。整数本身有32 二进制数字的空间。这个double在尾数中有53个二进制数字的位数和一个10位指数和一个符号位。
- 1. 为什么sizeof()返回4个字节而不是2个字节的short int?
- 2. 包装4个字节为一个int
- 3. pcap为什么总是8个字节的数据包...为什么?
- 4. 将4个字节的字节转换为一个int
- 5. 为什么CVPixelBufferGetDataSize总是返回更多32字节的数据?
- 6. C#转换字节数组为int总是相同数量
- 7. 四个1字节字符到一个4字节int?
- 8. 为什么sizeof(13.33)是8个字节?
- 9. 为什么双对齐到8字节边界,而不是4个字节
- 10. 什么是int的范围,只要它们都是4个字节
- 11. 字符串字节为一个int
- 12. INT转换为一个字节数组
- 13. 假设我们的结构填充和int的大小是4并且double的大小是8个字节
- 14. 的sizeof(2147483648)是8个字节,而的sizeof(2147483647 + 1)为4个字节
- 15. 为什么mode_t使用4个字节?
- 16. Recv总是收到1个字节
- 17. 为什么单个int 24个字节,但在列表它趋向于8个字节
- 18. 将int写入字节,长度为4
- 19. 是无符号长整型固定为int(4字节)范围,如果是这样,为什么它在内存中有8个字节?
- 20. 为什么sizeof字符常量是4个字节?
- 21. 为什么PROC FCMP函数总是返回33个字节而不再有?
- 22. 在Objective-C中,当sizeof(int)不是4个字节?
- 23. 为什么datekey中的表总是INT?
- 24. mySQL VARCHAR(256)+ mySQL INT =多少个字节?
- 25. 为什么一个字符串总是“大于”一个数字?
- 26. 为什么4个内存地址需要一个int变量-4个字节 - 如果一个内存地址是4个字节?
- 27. CCCryptor 3DES解密的前8个字节总是被损坏?
- 28. 字符串或字符串,int或Int32,字节或字节?你更喜欢哪个,为什么?
- 29. 为什么投射到一个字节然后立即回到一个int?
- 30. 为什么InputStream#read()返回一个int而不是一个字节?
C'mon,double和float都是浮点数,我的意思是int,简称,字节不接受浮点数,系统以x.xEx格式显示float值,只需设置一个双精度为1000并打印它 – 2013-06-29 18:03:19
变量的大小反映了可以存储在那里的最大信息量,而不是实际存储在任何时间点的量。查看香农和信息理论。 –
忽略仇敌。这是一个很好的问题。 – jason