我也要学C语言-第七章:IEEE浮点数表示法

Posted on   dodolook  阅读(3339)  评论(37编辑  收藏  举报

  之前呢,已经学习过无符号,有符号整数的表示(用补码),其实还有2个类型我没有说过,就是字符型和字符串型,主要我觉得这2种类型比较简单,看1会说就明白。字符型是用的阿斯卡码表示的,字符串型也一样,只是C的字符串呢,在结尾有个00。这个00就是判断字符串是否结束!引用字符串的变量其实就是代表字符串的首地址,然后呢依次检查下去,只要遇到了00就代表此字符串结束了。

IEEE浮点表示法

  IEEE浮点数表示:符号位(1位) +     指数位置(8位)   +尾数位(23位)

  1:将要表示的浮点数转化为二进制表示。比如:

    123456.0f = 11110001001000000

  2:然后移动小数点到最高位只有1位的1。比如:

    1.1110001001000000 一共移动了16位

  3:因为小数点每向左移动一位就相等于以2为底的指数加1.所以:

    1.1110001001000000 * 2^16

  4:指数部分呢一共是需要8位,把十进制的指数转化为二进制时先加上127(为什么要加127是因为它把127当着0.因为移位不只是往一边移,8位中间点正是7F,7F就是十进制的127).例如:

    16+127=143 = 10001111

  5:12345.0f由于是正数,所以符号位为0.(注意:尾数位少了1个1,是因为最高位肯定是1,所以为了节约内存考虑)所以:

    符号位(1位) +     指数位置(8位)   +尾数位(23位)

                  0                   10001111             11100010010000000000000

     然后!再组合起来!01000111111100010010000000000000

  然后!再4位1组!!  0100 0111 1111 0001 0010 0000 0000 0000

  然后! 再转化成16进制   4     7       F      1        2      0      0      0

  然后!再组合起来!47F12000

  然后!再倒过来! 0020F147(为什么要倒过来是因为VC内存排列是高位对高位,低位对低位)

  然后!再进行检验!:

  这样!我们就知道调试浮点数的时候,为什么内存里面的内容怪怪的了!!!

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示