计算机系统:程序员的视角说:
当在int、float和double格式之间强制转换值时程序将数值和位表示更改为如下(假设数据类型int为32位(:
- 从int到float,数字不能溢出,但可以四舍五入
- 从int或float到double,精确的数值可以保留,因为double具有更大的范围(即可表示的值(,以及更高的精度(即数字重要位(
为什么"可以是圆形的";从int到float,但是";可以被保存";从int到double?
这两种情况应该相同吗?(我想两者都没有舍入?(
这两种情况下应该相同吗?
否。典型的float
可以精确地表示所有整数值,仅高达约224,而double
可以这样做,高达253。
典型的int
是32位的,因此在224到231范围内的一些int
值在不取整的情况下不会转换为float
。
为了扩展这个想法,当转换为float
或double
时,大的long long
值可能会舍入。
另一种看待32位int
和32位float
的方法。每个可以表示大约232不同的值。由于float
可以用小数部分表示许多值,因此必须存在不能完全表示为float
的int
值。鸽子洞原理