二进制与十进制互相转化 二进制和十进制互相转换

本文功能:
浮点数0.1 + 0.2 不等于 0.3的前置知识点
我们知道js存储number类型的数据采用的是IEEE 754双精度(64位),我们了解到对应存储原理,才能具体解释0.1 + 0.2 不等于 0.3

二进制与十进制互相转化 二进制和十进制互相转换

文章插图
组成
描述
位数
位置
sign
符号,0表示正,1表示负
1bit
63
exponent
指数部分
11bit
52-62
fraction
小数部分
52bit
0-51
计算公式A:
二进制与十进制互相转化 二进制和十进制互相转换

文章插图
二进制与十进制互相转化 二进制和十进制互相转换

文章插图
看完公式我们举个栗子:
var a = 2
具体的思路: 将10进制转换为二进制,二进制使用科学计数法表示 。
根据公式即可得出结果
二进制与十进制互相转化 二进制和十进制互相转换

文章插图
最终结果:
二进制与十进制互相转化 二进制和十进制互相转换

文章插图
一、十进制转二进制
整数:
1.将十进制数用2整除法,得到商和余数
2. 继续用商用2整除法,直到商小于1
3. 从下到上依次写余数便得到转化后的二进制
例如: 9转二进制
二进制与十进制互相转化 二进制和十进制互相转换

文章插图
浮点数:
  1. 将数拆为整数和小数部分
  2. 整数用整数整除2法则
  3. 小数部分乘2 ,取出对应的整数部分
  4. 执行3点,直到值小数部分等于0或者达到所求有效位数
  5. 从上到下每次乘二的整数部分即为转化后的小数部分二进制
例如:9.3转二进制
整数部分二进制为:1001
小数部分转化过程:
二进制与十进制互相转化 二进制和十进制互相转换

文章插图
由上图可知转化为二进制的小数是 01 1011 1011...(1011的无限循环)
最终的转化为: 1001.011001(这是保留6位小数)
  1. 二进制转十进制
【二进制与十进制互相转化 二进制和十进制互相转换】整数计算:
二进制与十进制互相转化 二进制和十进制互相转换

文章插图
浮点数:
1.将数拆为整数和小数部分
2.整数用整数计算方式
3.小数按照下图计算
例如二进制数:0.111
二进制与十进制互相转化 二进制和十进制互相转换

文章插图