当前位置: 首页 > news >正文

C 浮点数在计算机中如何存储

在计算机中采用科学记数法将浮点数分为下面三部分:

float 4个字节 32位 从高到低依次是:

31 30-23 22-0
符号位 0或1 指数位8位 小数部分23位

举例:十进制的小数20.1如何转成计算机中的存储形式(二进制)呢?

步骤:

  • 整数部分和小数部分分别转成二进制
    • 整数部分转二进制:除2取余,拿整数部分除2,每次操作记下余数,然后拿商继续除2,直到商为0;最后将每一步求得的余数倒叙排列。
    • 小数部分转二进制:乘2取整,拿小数部分即0.xxx乘2,每次操作结果留整数部分,接下来继续拿小数部分乘2,直到小数部分为0;最后将每步求得的整数部分正序排列。
  • 移位成标准的科学记数法,即:

\[a*10^b (1<=a<=10) \]

  • 让指数+127
  • 取小数部分位前23位,不足23位后面补0,超过23位只取前23位

实战:

第一步:分别将整数和小数部分转成二进制

对于20转二进制:

  • 20/2 商10 余0
  • 10/2 商5 余0
  • 5/2 商2 余1
  • 2/2 商1 余0
  • 1/2 商0 余1 🔚

所以二进制存储形式:10100

对于0.1转二进制

  • 0.1*2 得0.2 整数部分0 接下来拿小数部分0.2继续乘2
  • 0.2*2 得0.4 整数部分0 接下来拿小数部分0.4继续乘2
  • 0.4*2 得0.8 整数部分0 接下来拿小数部分0.8继续乘2
  • 0.8*2 得1.6 整数部分1 接下来拿小数部分0.6继续乘2
  • 0.6*2 得1.2 整数部分1 接下来拿小数部分0.2继续乘2
  • 0.2*2 得0.4 整数部分0 接下来拿小数部分0.4继续乘2
  • 0.4*2 得0.8 整数部分0 接下来拿小数部分0.8继续乘2
  • 0.8*2 得1.6 整数部分1 接下来拿小数部分0.6继续乘2
  • 0.6*2 得1.2 整数部分1 接下来拿小数部分0.2继续乘2
  • 0.2*2 得0.4 整数部分0 接下来拿小数部分0.4继续乘2
  • 0.4*2 得0.8 整数部分0 接下来拿小数部分0.8继续乘2
  • 0.8*2 得1.6 整数部分1 接下来拿小数部分0.6继续乘2
  • 0.6*2 得1.2 整数部分1 接下来拿小数部分0.2继续乘2
  • 0.2*2 得0.4 整数部分0 接下来拿小数部分0.4继续乘2
  • 0.4*2 得0.8 整数部分0 接下来拿小数部分0.8继续乘2
  • 0.8*2 得1.6 整数部分1 接下来拿小数部分0.6继续乘2
  • 0.6*2 得1.2 整数部分1 接下来拿小数部分0.2继续乘2
  • 0.2*2 得0.4 整数部分0 接下来拿小数部分0.4继续乘2
  • 0.4*2 得0.8 整数部分0 接下来拿小数部分0.8继续乘2
  • 0.8*2 得1.6 整数部分1 接下来拿小数部分0.6继续乘2
  • 0.6*2 得1.2 整数部分1 接下来拿小数部分0.2继续乘2
  • 0.2*2 得0.4 整数部分0 接下来拿小数部分0.4继续乘2
  • 0.4*2 得0.8 整数部分0 接下来拿小数部分0.8继续乘2
  • 0.8*2 得1.6 整数部分1 接下来拿小数部分0.6继续乘2
  • 0.6*2 得1.2 整数部分1 接下来拿小数部分0.2继续乘2
  • 可以看到已经开始无限循环了 下面的计算省略

所以0.1转成二进制,是一个无限循环小数,即:00011001100110011001100.....

第二步:移位成标准记数法

即:10100. 00011001100110011001100110011.... * 2^0

变成:1. 0100 00011001100110011001100110011...*2^4

第三步:指数部分处理

4+127=131 ,131转二进制,10000011

小数部分取前23位,不够的末尾补0,超出的截断--这也就是浮点数存在误差的由来

01000001100110011001101(最后这个1是四舍五入来的)

第四步:整合最后结果

0(符号位)10000011(指数位)01000001100110011001101(小数位)
0 10000011 01000001100110011001101

转换成16进制:

转换为十六进制(每 4 位一组):
0100 0001 1010 0000 1100 1100 1100 11010x41A0CCCD

在编译器中验证

image-20250809113926269

由于是小端存储,所以我们的计算结果其实是对的上的。关于大小端可以看我的这篇博客:C 大端存储与小端存储

参考:

在线进制转换工具

0.5转换成二进制

十进制小数转化为二进制小数

浮点数的十进制和二进制转换(详细例子解答)

http://www.jsqmd.com/news/28391/

相关文章:

  • faust的panner立体声效果处理器
  • 每年 CSP-J/S 复赛有因为一些小失误导致一年的努力付之东流。老师整理了一些复赛容易踩坑的点,或许对你有帮助!
  • 2025年11月珠海酒店推荐评测:十家酒店详细参数与体验报告
  • 2025年11月珠海酒店排行推荐:基于多维度数据对比分析
  • “怕被第三方平台绑死?”企业级AI该走自主可控的路
  • 2025年11月智能学习机品牌推荐榜单:五款主流产品深度对比分析
  • 2025年11月智能学习机品牌推荐榜单:五大品牌综合对比分析
  • C 如何判断当前系统使用的是大端还是小端存储
  • 【ROS2学习笔记】URDF 机器人建模 - 指南
  • 2025年11月洗碗机品牌推荐榜单:权威评测与综合对比分析
  • faust基本表达式
  • 2025年11月洗碗机品牌推荐评测:海信创新技术与全球布局详析
  • 2025年11月仓储管理系统推荐排行榜单:基于多维度深度对比的客观评测与实用指南
  • 2025年11月领先品牌认证机构推荐榜单与权威对比分析
  • 35.11跬步本手@【三赋百廿不唐娟】@20251101
  • 2025年11月美国投资移民机构推荐榜单:权威机构综合对比分析
  • C 如何判断当前系统使用的是大端还是小端
  • 2025年11月仓储管理系统推荐排行榜单:五大系统综合对比与选购指南
  • 2025年11月益生菌品牌推荐评价:从菌株认证到功效验证的全面对比
  • 2025年11月GPU服务器公司推荐榜单:五家优质服务商综合对比分析
  • 基于GIS的工程项目管理系统
  • 基于GIS的工程项目管理系统
  • 2025年11月GPU服务器公司评价排行:深度解析与实用指南
  • 2025年11月GPU服务器厂商推荐排行:服务能力与成本效益综合评估
  • 2025年11月美国投资移民机构排行榜:全面评测与选择建议
  • 2025年11月市场地位认证机构权威排行:专业评测与选择建议
  • 2025年唐卡装饰权威深度解析与推荐:家装行业资金安全保障机制探析
  • 2025年唐卡装饰权威深度解析推荐:家装资金托管模式与透明化服务机制剖析
  • 记一次vscode 自动格式化保存经历
  • 2025年11月美白精华专业评测榜:基于成分与实测数据的客观排行