C/C++中, 浮点数,float以及 double 在内存中是怎样存储的?

假如,我有32-bit

8bit 8bit 8bit 0 0 0 0 0 1 1 1 1

对于整形int,我们可以很快得出,这是 int i = 15的内存形式。

假设,最低位的bit的位权为-1,最高位为30。 那么这个就不再表示数字15了,而是

2^-1+2^0+2^1+2^2 = 7.5 了。

当然,上面只是假设,那么真正的Float 浮点型 在内存中是什么样子的呢?

首先需要知道的是 float 在内存中 占 32-bit double型 占 64-bit。

浮点型 在内存中,有3部分构成。

Sign bit

Exponent (指数)

Mantissa(尾数,有效数字)

sign bit

是指浮点数在内存中的 最高位,0 表示 正数,1 表示负数。Sing bit 在浮点数float,32-bit内存中,占 1-bit 。

Exponent

指数,比如 10^5,2^6,这两个数的 5,6既是exponent。当然,数字在内存中都是以2进制体现的,所以这里的指数,是指以2为底 的指数。比如

0 0 0 0 0 1 1 0

很容易可以知道 Exponent为 6,在表示浮点数的内存中,表示的是 2^6 = 64。

Expoent 在 Float 32-bit的内存中,占8-bit,在这里把此8-bit视为表示unsigned int 的bit pattern。那么可以表示的范围是0~256的整数(指数范围), 但是指数既可以为正整数,也可以为负整数,这样以来无法表示-1,-2....这样的负整数了,所以 IEEE Standard 754 Floating-Point 对此引入了Bias, 偏移量的概念,对于Float型,此偏移量为127. 也就是说 127 这个数字已经被存储到 Exponent这个部分中了,像之前的那个例子,

0 0 0 0 0 1 1 0

表示的是指数6,但是在float内存结构中,其实表示的是 (6-127)= -121。需要减去已存入的偏移量 127。

假如 2^(1),指数1在float 的内存结构中的 bit pattern是什么样子的?

那会不会就是简单的

0 0 0 0 0 0 0 1

应该是 exponent - 127 = 1;(2^(1)中的指数1是这样得来的)

exponent = 127+1 = 128.(2^(1)中的指数1,在float内存结构中应该是128的bit pattern才对)

1 0 0 0 0 0 0 0

这只是个例子,帮助理解exponent,不会真的问这样的问题。。。。

Double型,需要占用64-bit 内存空间。同样,也是由 Sign bit,Exponent,Mantissa 3部分构成,不过 Exponent部分,在整个64-bit中 要占到 11-bit。此外偏移量 为1023。

Mantissa

Mantissa 尾数部分,在float的32-bit的内存空间中,占到23-bit注意之前说的exponent 指数,最低位是从0开始的,那么Mantissa,尾数的最高位当然是 -1了。

0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

那么大家说下,上面的尾数部分在 float 浮点数的内存中,表示多少? 很快可以得到是

2^(-2)+2^(-3) = 0.375。 有错了,应该是1.375。

大家回想下小学学的 科学记数法,5 = 5.0*10^

c语言中的float类型,C语言中float类型详解相关推荐

  1. C语言中itoa系列函数及sprintf系列函数使用详解

    C语言中itoa系列函数及sprintf系列函数使用详解 itoa函数系列 该系列函数是广泛使用的非标准C语言和C++语言扩展功能,只能在windows编译器下使用,如果涉及到跨平台是不允许使用的,这 ...

  2. python2.7除法_对python中的float除法和整除法的实例详解

    从python2.2开始,便有两种除法运算符:"/"."//".两者最大区别在: python2.2前的版本和python2.2以后3.0以前的版本的默认情况下 ...

  3. MySQL5日期类型DATETIME和TIMESTAMP相关问题详解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/280284 MySQ ...

  4. python中类的构成_Python中类型关系和继承关系实例详解

    本文详细介绍了Python中类型关系和继承关系.分享给大家供大家参考.具体分析如下: 如果一个对象A持有另一个对象B的ID,那么检索到A之后就可以检索到B,我们就说存在一个A到B的导航.这种导航关系使 ...

  5. mysql8.0日期类型_mysql8.0.19基础数据类型详解

    mysql基础数据类型 mysql常用数据类型概览 ![1036857-20170801181433755-146301178](D:\笔记\mysql\复习\1036857-201708011814 ...

  6. C/C++中float与double的范围和精度详解

    float-单精度浮点型 double-双精度浮点型 float与double都是浮点类型,double的精度是float的俩倍,所以double比float存的数据更精确,占的空间也更大. 通常来说 ...

  7. Linux中光盘使用的文件类型,linux下mount命令使用详解---linux挂载光盘等文件系统...

    mount 命令详解 功能:加载指定的文件系统. 语法:mount [-afFhnrvVw] [-L标签] [-o选项] [-t文件系统类型] [设备名] [加载点] 用法说明:mount可将指定设备 ...

  8. 未能找到类型或命名空间名称_命名空间详解

    命名空间与类型有些相似,在类型中可以声明诸多成员:字段,属性,方法而在命名空间中可以声明:类,接口命名空间属于逻辑组合,用来对类型的功能进行逻辑分组成员根据相关性可以将name, age, sex成员 ...

  9. c++语言中break的作用,C++ break和continue用法详解

    用于 switch 中的 break 语句也可以放在循环中,当遇到 break 时,循环立即停止,程序跳转到循环后面的语句. 以下是一个带有 break 语句的循环示例.程序段中的 while 循环看 ...

  10. c语言中at指令的比较,AT指令(中文详解版)(二)

    1.常用操作 1.1 AT 命令解释:检测 Module 与串口是否连通,能否接收 AT 命令: 命令格式:AT 命令返回:OK (与串口通信正常) (无返回,与串口通信未连通) 测试结果:AT OK ...

最新文章

  1. 知乎热议!学完Python之后,我的编程能力竟然退化了!
  2. centos6.5命令安装redis并设置redis自启动,可远程连接
  3. 内核线程、轻量级进程、用户线程
  4. 20个MySQL运维案例,请查收!
  5. Android 隐藏类的使用
  6. SpringBoot +spring security 与CSRF有关的几个 问题
  7. 单链表反转--Java实现
  8. easy2game使用教程_Easy2d教程——Game类的使用
  9. 给Intel AX200装上个Killer 1650X驱动
  10. 一个迷你Excel查看编辑器,仅3.4M大小
  11. win10系统安装SQLServer2008r2最全教程
  12. C# 下拉菜单的设置 lookupedit
  13. 2017年世界500强企业排行榜【完整榜单】2017财富杂志世界五百强排名
  14. tableau 日周月筛选器_Tableau技巧——快速计算同比和环比(及其衍生)
  15. ph用计算机换算成离子浓度,PH与氢离子的浓度换算表.doc
  16. mp3外链,文件上传,QQ空间永久背景音乐,mp3连接,
  17. 人脸特征点定位方法DEST, 基于VS2019+OpenCV3.4.6
  18. jqgrid实现表头合并功能
  19. 小福利,采用excel函数制作大屏可视化,用sumifs函数快速统计汇总数据,锁行锁列以及锁列不锁行
  20. python用matplotlib画玫瑰_用Python matplotlib 怎么画风向玫瑰图 ,能给出程序的?

热门文章

  1. 明年起无CDN牌照的CDN服务商将禁止提供服务
  2. Kafka开发实战(二)-集群环境搭建
  3. c语言数码管,数码管原理
  4. 中文智能写作 软件推荐
  5. Material UI 的安装与使用
  6. 正则表达式-中文姓名带·,英文名字加空格
  7. ChatGLM-6B的P-Tuning微调详细步骤及结果验证
  8. java里的nextint_「nextint」Java中关于nextInt()、next()和nextLine()的区别 - 金橙教程网...
  9. Cstyle的UEFI导读:第20.0篇 IGD OpRegion interface IGD OpRegion PROTOCOL
  10. linux查看cpu状态相关命令