基础学习: 3.14 转为化2进制
小数转化为2进制的一点点思考
小数转2进制
- 丢失精度的情况 3.14
- 可以正常不丢失精度的情况如 0.5
小数 3.14 这种是无限不循环的小数。
11.00100011110101110000101000111101011100001010001111
对于 3.14,转换为二进制的过程也是类似的。我们可以使用以下步骤来将 3.14 转换为二进制:
将整数部分和小数部分分开。3.14 的整数部分是 3,小数部分是 0.14。
将整数部分转换为二进制。3 的二进制表示是 11。
将小数部分转换为二进制。这个过程与之前的 0.5 类似
0.14 * 2 = 0.28 --> 整数部分为 0
0.28 * 2 = 0.56 --> 整数部分为 0
0.56 * 2 = 1.12 --> 整数部分为 1
0.12 * 2 = 0.24 --> 整数部分为 0
0.24 * 2 = 0.48 --> 整数部分为 0
0.48 * 2 = 0.96 --> 整数部分为 0
0.96 * 2 = 1.92 --> 整数部分为 1
0.92 * 2 = 1.84 --> 整数部分为 1
0.84 * 2 = 1.68 --> 整数部分为 1
0.68 * 2 = 1.36 --> 整数部分为 1
0.36 * 2 = 0.72 --> 整数部分为 0
0.72 * 2 = 1.44 --> 整数部分为 1
0.44 * 2 = 0.88 --> 整数部分为 0
0.88 * 2 = 1.76 --> 整数部分为 1
0.76 * 2 = 1.52 --> 整数部分为 1
0.52 * 2 = 1.04 --> 整数部分为 1
0.04 * 2 = 0.08 --> 整数部分为 0
0.08 * 2 = 0.16 --> 整数部分为 0
0.16 * 2 = 0.32 --> 整数部分为 0
0.32 * 2 = 0.64 --> 整数部分为 0
0.64 * 2 = 1.28 --> 整数部分为 1
...
小数 0.5 的转化过程
要将 0.5 转换为二进制,我们可以使用以下步骤:
将小数 0.5 乘以 2。
将结果的整数部分作为二进制的第一位。
将结果的小数部分继续乘以 2。
将新的结果的整数部分作为二进制的第二位。
重复步骤 3 和 4,直到小数部分为 0 或者已经得到所需的精度。
现在,我们来按照这个步骤将 0.5 转换为二进制:
为什么
- 3.14 | 0: 为什么就可以向下取整(去零头)
- 0.1 + 0.2 为什么会丢失精度
或运算
有1则为1
1010
| 1100
-------
1110
与0或
- 3.14 最终会转化为下面的运算过程
- 由于小数 | 0 的位运算,只会计算机整数部分(由于
位运算符 | 只关心整数部分的二进制位,因此在执行位或运算时,小数部分会被忽略
,不会影响最终的结果。)
当执行 11.001000111101011100001010001111 | 0 这个操作时,JavaScript 中的位运算符 | 会将左操作数和右操作数都转换成 32 位带符号整数,然后执行位或运算。
这个运算过程不会改变结果的小数部分,只会对整数部分进行位或运算。
11.00100011110101110000101000111101011100001010001111
00000000000000000000000000000000000000000000000000000
----
11