C语言中怎么存储浮点数

发布时间:2021-07-02 16:26:53 作者:Leah
来源:亿速云 阅读:276

这篇文章给大家介绍C语言中怎么存储浮点数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

C语言中,有两种类型的浮点数:32位的float和64位的double,而在计算机中存储的是用二进制的科学计数法(即基数为2)表示的值

例如100=1100100B=1.1001B*26,123.456=1111011.0111010010111100011010100111111011111001110111B=1.1110110111010010111100011010100111111011111001110111B*26

C语言中怎么存储浮点数

既然基数固定为2,尾数的整数部分固定为1,那存储时就可以省略掉它俩了,只需要存储另外三个信息:  正负符号+指数+尾数的小数部分

float:符号占1位,指数占8位,尾数小数占23位;

double:符号占1位,指数占11位,尾数小数占52位

不过指数也有正负,因此存储时加个偏移来表示。  float用8位表示指数,偏移就是127;  double用的是11位,那偏移就是1023
看看123.456用float是如何存储的:  因为是正数,符号位用0;指数是6,加上偏移127后,133=10000101B;尾数的小数部分的前23位是  1110110111010010111100  1  (第24位是1,因此需要进位),拼接成32位数就是0  10000101  11101101110100101111001  B=1123477881

C语言中怎么存储浮点数

再看一个纯小数的存储,例如0.00123456,这次倒着推导一下

计算机中存储的是983683318,转换为二进制就是0  01110101  01000011101000011110110  B。其中第一个0表示正值;挨着的8位01110101B=117,表示指数为(117-127)=-10;最后的23位表示尾数的小数部分,前面加上整数部分的1,再左移23位之后就是1  01000011101000011110110  B=10604790。那么原值就是10604790右移23位,再左移-10位,即10604790右移33位。而233=8589934592。所以原值就是10604790/8589934592=  0.0012345600  407571,可见前10位小数都是正确的,精度还可以

C语言中怎么存储浮点数

最后试个double的123.456

C语言中怎么存储浮点数

二进制就是:0  10000000101  11101101110100101111,00011010100111111011111001110111  B。其中第一个0表示正值;指数位是10000000101B=1029,表示指数为(1029-1023)=6;最后是52位尾数,前面加上整数部分的1,再左移52位之后,1  1110110111010010111100011010100111111011111001110111  B=8687443681197687。因此,原值就是8687443681197687右移52位,再左移6位,即右移46位,而246=70368744177664。

8687443681197687/70368744177664=123.456

C语言中怎么存储浮点数

关于C语言中怎么存储浮点数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. Go语言浮点数的存储方式
  2. 深度剖析数据在内存中的存储2——浮点数数在内存中的存储

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:C语言中怎么使用static关键字

下一篇:DOM基础以及php读取xml内容操作的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》