十进制 -> 二进制

将整数部分和小数部分分开处理

例:3.125(10)
其整数部分为11(2)

小数部分按照下面的步骤求解:

  1. 0.125 x 2 = 0.25 取0
  2. 0.250 x 2 = 0.50 取0
  3. 0.500 x 2 = 1.00 取1

当小数部分都为0的时候结束
得到.001(2),合并整数部分得11.001(2)

二进制 -> 十进制

  1. 十位:1 x 21 = 2
  2. 个位:1 x 20 = 1
  3. 十分之一位:0 x 2 -1 = 0
  4. 百分之一位:0 x 2 -2 = 0
  5. 千分之一位:1 x 2 -3 = 0.125

全部相加得到3.125(10)

浮点数的表示法——IEEE 754标准

将3.14分别按照32位单精度和64位双精度表示

整数部分11(2)

32位单精度:

小数部分
01 : 0.140000 x 2 = 0.280000 取0
02 : 0.280000 x 2 = 0.560000 取0
03 : 0.560000 x 2 = 1.120000 取1
04 : 0.120000 x 2 = 0.240000 取0
05 : 0.240000 x 2 = 0.480000 取0
06 : 0.480000 x 2 = 0.960000 取0
07 : 0.960000 x 2 = 1.920000 取1
08 : 0.920000 x 2 = 1.840000 取1
09 : 0.840000 x 2 = 1.680000 取1
10 : 0.680000 x 2 = 1.360000 取1
11 : 0.360000 x 2 = 0.720000 取0
12 : 0.720000 x 2 = 1.440000 取1
13 : 0.440000 x 2 = 0.880000 取0
14 : 0.880000 x 2 = 1.760000 取1
15 : 0.760000 x 2 = 1.520000 取1
16 : 0.520000 x 2 = 1.040000 取1
17 : 0.040000 x 2 = 0.080000 取0
18 : 0.080000 x 2 = 0.160000 取0
19 : 0.160000 x 2 = 0.320000 取0
20 : 0.320000 x 2 = 0.640000 取0
21 : 0.640000 x 2 = 1.280000 取1
22 : 0.280000 x 2 = 0.560000 取0
23 : 0.560000 x 2 = 1.120000 取1
……

显然,对0.14的转换是没有尽头的,对这样“无限不循环”的小数,只需按照单精度标准,保留23位。


.00100011110101110000101

合并起来就是
11.00100011110101110000101

按尾数的要求转换:
1.100100011110101110000101 x 21

阶码E = 1 + 127 = 128,有效数字M = 1.1……01

有效数字位因为1 <= M < 2,舍去整数位的1,存储小数点后24位的值
1001 0001 1110 1011 1000 0101 (第24位0舍1入)
1001 0001 1110 1011 1000 011

最后得到32位单精度模式下3.14在计算机中的存储形式(float类型)

0 1000 0000 1001 0001 1110 1011 1000 011

64位双精度:

对0.14进行转换,按照64位双精度标准,保留52位。

.0010001111010111000010100011110101110000101000111101

合并得
11.0010001111010111000010100011110101110000101000111101

按照尾数要求转换:
1.10010001111010111000010100011110101110000101000111101 x 2 1

阶码E = 1 + 1023 = 1024,有效数字M = 1.1……01

有效数字位:因为1 <= M < 2,舍去整数位的1,存储小数点后53位的值
1001 0001 1110 1011 1000 0101 0001 1110 1011 1000 0101 0001 1110 1(第53位0舍1入)
1001 0001 1110 1011 1000 0101 0001 1110 1011 1000 0101 0001 1111

最后得到64位双精度模式下3.14在计算机中的存储形式(double类型)

0 1000 0000 000 1001 0001 1110 1011 1000 0101 0001 1110 1011 1000 0101 0001 1111

总结

将十进制小数用IEEE 754表示时,若遇到诸如3.14这种“无限不循环”的小数,单精度模式下,十进制转二进制的循环进行到小数点后24位即可;双精度模式下,进行到小数点后53位即可。以“满1进位”的原则舍去多出来的第24位和第53位。

最新文章

  1. smarty模板原理和增删改查例题
  2. [转] 腾讯云直播OBS推流教程
  3. VS生成事件
  4. Smarty模板学习
  5. SQL Server表的数据量大小查询
  6. POJ 1733 Parity game(离散化+带权并查集)
  7. 2015WF有感
  8. 引用System.Runtime.Serialization.Json
  9. A*算法(八数码问题)
  10. ARP及RARP简介
  11. 读书笔记 effective c++ Item 31 把文件之间的编译依赖降到最低
  12. 《JavaScript高级程序设计》笔记一
  13. thinkphp3.2自定义常量
  14. 【安卓开发】Layout Inflation不能这么用
  15. 【Linux】【Apatch Tomcat】Linux、CentOS7安装最新版Apartch Tomcat环境
  16. flutter 自定义输入框组件
  17. Spring错误——Spring 注解——factory-bean reference points back to the same bean definition
  18. css iphonex适配
  19. 『原创』手把手教你搭建一个实用的油耗App(一)
  20. linux 目录结构+常用命令+压缩命令+vim使用+及基础知识

热门文章

  1. [源码解析] 深度学习流水线并行之PopeDream(1)--- Profile阶段
  2. 3k+2形式的素数相关的两个命题的证明
  3. 01_Keil与Proteus联合仿真的注意事项
  4. 通俗易懂讲解Word2vec的本质
  5. Python__Xpath模块
  6. Toast控件
  7. pyRevit开发:如何创建轴网
  8. FinallShell连接Centos虚拟机
  9. dubbo 2.7应用级服务发现踩坑小记
  10. MySQL高级语句(二)