最为一个常识,我们都知道浮点型在内存中占用的是 4 个字节的空间,而 long 型占用的是 8 个字节的空间。可是为什么 4 个字节的 float 型的最大值会大于 long 型的最大值呢?
我们都知道,float 类型的范围是:一 3.403E38~3.403E38。而 long 类型的范围是:-263~263-1(大概是 9*10^18)。
我以前也是简单的记住就算完事了,对于它为什么会这样却没有考虑过。
下面给大家分享一下我现在的理解:
long 整型数,在内存中占用 8 个字节共 64 位,它表示的数值有 2 的 64 次方,平分正负,数值范围是负 2 的 63 次方到正 2 的 63 次方 - 1。
而 float 在内存中占 4 个字节,共 32 位,但是浮点数在内存中是这样的:
V=(-1)^s * M * 2^E
667x190
浮点数的 32 位不是简单的直接表示大小,而是按照一定的标准分配的。
其中第 1 位,符号位,即 S。
接下来的 8 位,指数域,即 E。
剩下的 23 位,小数域,即 M,M 的取值范围为 [1,2)或 [0,1)。
也就是说,浮点数在内存中的二进制值不是直接转换为十进制数值的,而是按照上述公式计算而来,通过这个公式,虽然只用到了 4 个字节,但是浮点数却比长整型的最大值要大。
float存数空间是否大于long的?
最新推荐文章于 2024-01-02 21:51:07 发布