c中的printf

作者 : 开心源码 本文共571个字,预计阅读时间需要2分钟 发布时间: 2022-05-12 共164人阅读
#include <stdio.h>int main(){        printf("%.1f\n", 8/6);        return 0;}result:0.0

????????首先,8/6按数学来算是1.6,在计算机中是以 int 存储,所以结果为1。但是这里为什么是0.0?很简单,由于 printf 中用了 %.1f 格式化。看似简单的问题,实际上是由于计算机内部的起因,由于计算机内部存储数据是按照定点数和浮点数来存储的,其中定点数很简单,复杂的是浮点数的存储,具体解释可以参考 CSAPP 或者者任何一本计算机组成原理的书籍。

????????在这里,我想记录的不是上述起因,我一开始不了解的是既然是以 float 来解释数据,但为什么当我格式化 0x7fffffff 时,结果仍旧为 0.0?

int、float 在计算机内一般都是 4B,所以当我格式化一个最大的整型数字时,为什么还是 0.0,按照 IEEE 754标准来解决,自己计算的结果显著不是一个下溢数字(当作0解决)。

????????原来 %f 在 printf 中是以 double 来格式化的,即 8B(此处大家可以试试 printf("%.1f\n", 0x3fffffffffffffff);输出结果为 2.0

具体计算机原理中数字部分的原理可以参考任何一本计算机组成原理的书籍,不想打太多字,不了解可以私信我,或者者加我QQ: 1583801169

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » c中的printf

发表回复