C语言中浮点型的存储方式

我们知道,整数在内存中是以补码的形式存放,其中正整数的原码反码补码相同;而负数的补码是它的反码加1.

例:

原码:0000 0000 0000 1000
反码:1111 1111 1111 0111
补码:1111 1111 1111 1000 

那么浮点型呢?开局一张图

类型 描述
float 单精度浮点值。单精度是这样的格式,1位符号,8位指数[阶码],23位小数。
image
double 双精度浮点值。双精度是1位符号,11位指数,52位小数。
image

以float为例描述储存过程。

  1. 将浮点数转化为二进制数据
  2. 将二进制数据转化为指数形式
  3. 将指数进行移为(float +127,double +2^10-1)
  4. 最高位表示符号,依次表示指数与尾数

如 浮点数4.5f

  1. 转化为二进制数据为 4->100,0.5->1====>100.1
  2. 转为指数形式为1.001*2^2
  3. 以上得到指数为2,底数为2,尾数为1.001
  4. 最高位表示符号,为正,所以最高位为0,中间8位表示指数,指数为2,移位后为129,用二进制表示为:10000001
  5. 尾数1.001因为表示成指数后第一位都是1,所以可省,只记录001,其余以0补位
  6. 最终结果为:01000000100100000000000000000000
  7. 转化为十六进制为:0x40900000
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 浮点类型 用于表示有小数部分的数值。Java中有两种浮点类型, 也可以用16进制表示浮点数值。例如0.125=2-...
    狮_子歌歌阅读 1,323评论 0 2
  • 本文是对论文《The Z1: Architecture and Algorithms of Konrad Zuse...
    逸之阅读 4,514评论 15 12
  • (关键词:逻辑层(service)和数据访问层(Dao) Unitils、Spring测试框架、UnitilsJU...
    Aubade阅读 5,560评论 0 0
  • 写着篇文章的时候,我依旧不知道该如何将考研之路走下去,只是,我有一个冲动:想,留下点什么…… 说起我的人,我的人生...
    和你有关的阅读 304评论 4 3
  • 前段时间想通过炒币来实现财富自由,我承认那是抱着一夜暴富的心炒币。大潮已经退去最近也一直在总结,发现问题在于我把财...
    知识就是力量zsjsll阅读 232评论 1 0