基础学习: 3.14 转为化2进制

小数转化为2进制的一点点思考
更新于: 2023-07-28 14:38:07

小数转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