热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在c语言中执行这两条语句printf("%d/n",5.01);printf("%f/n",5);

在c语言中执行这两条语句printf(%dn,5.01);printf(%fn,5);说这两条语句最后执行结果不是输出5和5.000000而是输出了一个和大的数(我

在c语言中执行这两条语句 printf("%d/n", 5.01); printf("%f/n", 5);

说这两条语句最后执行结果不是输出5和5.000000 而是输出了一个和大的数(我自己执行的是1789985710)和0.000000。 是感觉非常的不可思议。。。。。。。。

其实,在我们当我们弄清楚浮点数的存储格式之后,就会明白其中的奥妙了。 在C语言标准中,浮点数是采用IEEE754标准 float类型数据存储格式如下:

最高位最低位符号S 阶码E 尾数M 最高位 31 位 ,保存符号位 S“, 0”表示正数 ,“1”表示负数 30 位~23 位 ,共 8 位 ,移码方式(指数值加上偏移量127)保存指数部分 ,称为阶码 22 位~0 位 ,共 23 位 ,保存系数部分 ,称为尾数 ,对于规范化二进制数 ,整数位的前导“1”不保存 。

隐含 直接保存小数部分 对于 double 型 ,IEEE 754 - 1985标准规定用64 位表示 ,具体如下: ·最高位63 位 ,保存 S“, 0”正数“, 1”负数; ·62 位~52 位 ,共 11 位 ,移码方式(指数值加1023)保存指数 ,称为阶码;

·51 位~0 位 ,共 52 位 ,保存系数部分 ,称为尾数 ,对于规范化二进制数 ,整数位的“1”不保存隐含) ,直接保存小数部分 将5.01压入栈,为double的数,栈8个字节。

而执行printf("%d/n", 5.01);则只需要取前四个字节就可以了。

取出来为. printf("%f/n", 5); 将5压入栈为 0000 0000 0000 0000 0000 0000 0000 0101,执行printf("%f/n", 5);需要从栈中取8个字节, 取0000 0000 0000 0000 0000 0000 0000 0101之后,还要取他之后的四个字节, 但不管如何,前四个字节为0000 0000 0000 0000 0000 0000 0000 0101的浮点数为0.000000,所以输出0.000000

注意:内存内容是没有改变的,决定内存中内容的语义是读取的格式,float和double的存储格式和int类型的格式区别非常大。(但是都是低字节放在前面,高字节放在后面)


推荐阅读
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
  • C语言自带的快排和二分查找
    Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
author-avatar
瞬间的永恒2502931493
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有