【发布时间】:2012-03-02 02:56:11
【问题描述】:
我使用 sizeof 检查我的64 bit amd opteron 机器中的 long 和 float 的大小。两者都显示为 4。
当我检查 limits.h 和 float.h 的最大浮点和长值时,我得到了这些值:
Max value of Float:340282346638528859811704183484516925440.000000
Max value of long:9223372036854775807
既然它们的大小相同,那么与 long 相比,float 怎么能存储这么大的值呢?
我假设它们对浮点数有不同的存储表示。如果是这样,这是否会影响性能:即,使用 long 是否比使用 float 更快?
【问题讨论】:
-
有些不对劲。如果
sizeof(long) == 4,那么long的最大值只能是2147483647。 -
只有 32 位的 long 值是错误的。应该只有 20 亿左右。
-
一些 64 位 ABI 有 32 位长和 64 位长 - 其他的都使用 64 位。
-
这些最大值分别从 float.h 和 limits.h 打印出来。现在我研究了一下,它不应该那么大是有道理的
-
如果 sizeof(long) = 4,那么最长的最大值确实是 2147483647 并且您误解了 limits.h 的内容,可能将 long long 的最大值误认为 long 的最大值。