c++ - 当它只有 4 个字节时,float 怎么可能容纳 3.4E38 这样大的数字呢?

标签 c++ floating-point size byte bit

<分区>

谁能用通俗易懂的语言解释一下,当 float 只有 4 个字节时,它怎么可能容纳 3.4E38 这样大的数字?

因为这总共有 32 位,最大的数字是 2E31 + 2E30 + 2E29 + ... + 2E0,相当于 2147483647。那么为什么 float 可以容纳这么大的数字而 int 只能容纳 2147483647 而两者都是几乎相同的 4 个字节大小?

非常感谢您的提前帮助。

最佳答案

您的问题暗示了答案:

How is it possible for float to hold a number as large as 3.4E38

“3.4E38”怎么能用这么少的数字来指代这么大的值呢?好吧,它在 E 的左侧保留一个设定范围内的值 (1 <= 3.4 < 10) - 有效数字的数量较少,并保留指数 “38” 在右边 - 编码 10^38 的乘法 - 这也很容易存储。

float 值做同样的事情,尽管是二进制形式:23 位存储尾数(即“左”值),8 位存储指数;另一位是正负号。

更详细的信息请访问 wikipedia .

我也衷心推荐this online "calculator"它可以让你输入一个像 3.4E38 这样的值,查看二进制表示 (01111111011111111100100110011110),以及存储值的更准确的近似值;您甚至可以切换位并查看它们如何影响存储的值。

关于c++ - 当它只有 4 个字节时,float 怎么可能容纳 3.4E38 这样大的数字呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34389215/

相关文章:

math - float 学有问题吗?

php - mySQL 到 PHP 到 jQuery 返回浮点值作为字符串 (JSON)

iphone - ios - 每次应用程序 :openURL:sourceapplication is fired, iCloud 备份大小增加

c - 将具有固定长度字符串的数组传递给 C 中的函数

c++ - 如何获取以字符串和其他用户定义类型作为数字的给定结构的大小(以字节为单位)?

c++ - 如何在 fork 子项中发布使用 app_indicator_new 创建的 AppIndicator 引用?

c++ - 如何从全局 Hook 与应用程序进行通信?

c++ - C++ 程序员应该避免 memset 吗?

c++ - {fmt}在字符串中仅替换一个位置参数几个位置参数

C++ Double size/溢出问题