可能重复:
what the difference between the float and integer data type when the size is same in java?
您可能知道,这两种类型都是32位的。int
只能保存整数,而float
还支持floating point数字(正如类型名称所示)。
那么,int
是231,float
是3.4*1038,而它们都是32位,这是怎么可能的呢?
我认为int
容量应该比float高,因为它不为浮点数保存内存,只接受整数。
4条答案
按热度按时间6jygbczu1#
你的直觉很正确地告诉你,一个中的信息量不会比另一个多,因为它们都有32位。但这并不意味着我们不能用这些位来表示不同的值。
假设我发明了两种新的数据类型,
uint4
和foo4
。但是
foo4
使用4位来表示这些值:现在
foo4
的取值范围比uint4
大得多,尽管它们的位数相同!为什么?因为有些uint4
的值不能由foo4
表示,所以位Map中的这些“槽”可用于其他值。int
和float
也是一样的--它们都可以存储一组232个值中的值,只是不同的232个值。ukxgm1gy2#
一个float可能存储一个更大的数值,但它甚至在小数点之前的数字上也不精确。考虑下面的例子:
请注意,几乎没有保持任何精度。
另一方面,整数总是精确地存储其值范围内的任何数字。
为了便于比较,我们来看一个双精度浮点数:
请注意,保留的有效位数大约是原来的两倍。
wa7juj8i3#
这些都是基于IEEE754浮点规范,这就是为什么它是可能的。请阅读此documentation。它不仅仅是多少位。
n9vozmp44#
提示在“浮点数”的“浮点数”部分。你所说的基本上是假设定点的。浮点数不为小数点后的数字“保留空间”-它有有限的位数(23二进制),并记住2的幂乘以它。