看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储,

先简单的做个笔记,后面需要更深入的理解。

IEEE754定义了四种表示浮点数的方式:单精度(32bit),双精度(64bit),延伸单精度(43bit以上),延伸双精度(79bit以上),后两者很少使用,这里讲的是前面两种。

用二进制来表示浮点数分三个部分,以下都已32bit的单精度为例,双精度类似可以推算出来:

三部分为:符号位(sign)、指数(exponent)、尾数(significand,存储二进制小数部分),下面是维基上的图:

单精度浮点数中,sign为1bit,exponent为8bit,significand为23bit,三部分组成32bit。

还有一个概念比较重要“指数偏移值”,在IEEE754中指浮点数表示中的指数域(exponent)的编码值为指数的实际值加上一个固定值,这个固定值的算法是2e-1 - 1

在单精度浮点数中为128-1 = 127.

小数部分定义是f=0.fn-1fn-2...f0,二进制小数点在最高有效位的左边,而有小数定义为M=1 + f,所以M表示成1.fn-1...f0,通过调整指数,使有效数M在1~2之间

看一个例子8.25,

转换成二进制表示1000.01 可以表示成 1.00001 *23

所以指数E = 3 + 127 = 130

所以8.25在内存中表示是:

0 10000010 00001000000000000000000

其中对于小数部分如何转换成二进制,可以按一下方式小数部分*2,取整数部分值(0或者1)

,然后继续取结果的小数部分*2,在取整数部分,一直循环,直到取得想要的位数,

如0.25 *2 = 0.5, 整数部分为0,然后0.5*2=1.0,整数部分为1,所以二进制表示为0.0100000..00

指数的取值范围是从-126~127,所以当一个浮点数如0.25,时可以表示成1.000*2-2

所以指数偏移值为-2 + 127=125

在内存中表示是

0 01111101 00000000000000000000000

以上都是浮点表示中规格化值的用法,其他还有非规格化和特殊值两种,以后再补充。

IEEE二进制浮点数算术标准学习的更多相关文章

  1. IEEE二进制浮点数算术标准(IEEE 754)

    整理自IEEE 754 IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0) ...

  2. IEEE 754二进制浮点数算术标准

    可能很多人都遇到过浮点数精度丢失的问题,下面以JavaScript为例. 1 - 0.9 = 0.09999999999999998 纳尼,不应该是0.1么,怎么变成0.099999999999999 ...

  3. IEEE754二进制浮点数算术标准

    对于32位浮点数 sign: 符号,1位 exponent: 指数,8位,偏码 fraction: 分数,23位,原码 特殊值   指数域的编码值 = 指数的实际值 + 127 这样按照字典序的顺序就 ...

  4. IEEE 二进制浮点数的表示

    朋友在谈一个物流相关的项目,是以前项目的一个延续,涉及到后台的扩展,手机端的App,外加两个App的对接的蓝牙打印机.这个项目前后说了一个多月了吧,最近才草拟了协议.项目本来不复杂,但是客户却如此的拖 ...

  5. IEEE 754浮点数表示标准

    二进制数的科学计数法 C++中使用的浮点数包括采用的是IEEE标准下的浮点数表示方法.我们知道在数学中可以将任何十进制的数写成以10为底的科学计数法的形式,如下 其中显而易见,因为如果a比10大或者比 ...

  6. IEEE 754 浮点数在计算机中的表示方法

    IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denorma ...

  7. 深入理解计算机系统(2.7)---二进制浮点数,IEEE标准(重要)

    2.6我们进行了二进制整数运算的最后一役,本次LZ将和各位一起进入浮点数的世界,这里没有无符号,没有补码,但是有各种各样的惊奇.倘若你真正的进入了浮点数的世界,一定会发现它原来是这么有意思,而不是像之 ...

  8. 蓝牙(Bluetooth) IEEE 802.15.1 协议学习

    catalogue . 蓝牙概念 . 配对和连接 . 机密安全性 . 蓝牙协议分类 . 蓝牙协议栈 1. 蓝牙概念 蓝牙(Bluetooth)是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网 ...

  9. DICOM:DICOM标准学习路线图(初稿)

    题记: DICOM医学图像处理专栏撰写已有两个年头,积累了近百篇文章.起初只是用于记录自己科研.工作中遇到的疑难问题,专注于图像处理(主要是医学图像,这也正是专栏名称最初的由来):后来逐渐延伸到了DI ...

随机推荐

  1. java8中map的meger方法的使用

    java8中map有一个merge方法使用示例: /** * 打印出包含号码集的label的集合 * * @param args */ public static void main(String[] ...

  2. Data Transformation / Learning with Counts

    机器学习中离散特征的处理方法 Updated: August 25, 2016 Learning with counts is an efficient way to create a compact ...

  3. dev_set_draw的fill和margin模式

    注意:分别观察两张填充模式,一种是内部填充,一种是边缘填充.还有一种缺省的填充. Name dev_set_draw — Define the region fill mode. Signature ...

  4. Redis中的简单事物以及消息订阅发布

    Redis支持简单的事物,但是没有mysql的Innodb支持的那么的完善 我们接下来看一下Redis和Mysql的事物的一个对比:   MySQL Redis 开启 start transactio ...

  5. Python语法二

    1.raw_input 输入 2.如果想查看某个关键字的用法,可以在命令行输入pydoc raw_input. 如果是windows,那么试一下 python -m pydoc raw_input 3 ...

  6. Eculid算法 以及Extend_Eculid算法 证明及实现

    Eculid算法  欧几里得算法 证明: 设两数a,b(a<b). 令c=gcd(a,b) . 则 设a=mc, b=nc . 所以 r= r =a-kb=mc-knc=(m-kn)c  . 所 ...

  7. web初学之MVC

    之前对JavaEE的MVC模式有些许了解,但一直没有很好的掌握,在读代码时候也很模糊不清.因此对MVC又通过各种资料有了全面的理解. 一.首先,需要从了解JavaEE技术开始.JavaEE技术在设计程 ...

  8. 常用的几个DOS批处理

    1.启动ORACLE net start OracleServiceQSJBnet start OracleDBConsoleqsjbnet start OracleOraDb10g_home1TNS ...

  9. Servlet学习五——流的分发

    在上一节中有提到,流的传输,可以考虑Stream,但如果需要同时分发流和其它信息,,就需要再考虑其它方式了. 在coding中,服务端查询结果都是以gson进行传输,当需要传输一个语音并且同时需要传输 ...

  10. js 赋值 要用 toString() ; 太坑了。

    js 赋值 要用 toString() ;     太坑了. js 赋值 要用 toString() ;     太坑了. js 赋值 要用 toString() ;     太坑了.