假设我们有指数范围为 [-3,3] 且精度为 4 位的规范化 float 。下面你看到 4 个十进制数字和相应的二进制表示。如何将这些十进制数转换为二进制数?我知道如何从二进制转换为十进制,但反之则不然。
0.11 (decimal) = 1.000 * 2^-3 (binary)
3.1416 (decimal) = 1.101 * 2^1 (binary)
2.718 (decimal) = 1.011 * 2^1 (binary)
7 (decimal) = 1.110 * 2^2 (binary)
最佳答案
只要从尾数和指数的定义中出去。指数是最简单的部分。尾数不过是两个负幂的总和:1 + ½ + ¼ + ⅛ …,其中一些乘以 1,一些乘以 0。
要确定指数的值,请找到两个的最大幂,当除以(乘以 [0,1) 中的数字)时,给出范围 [1, 2] 中的值。
对于 0.11,它是 -4(不是你所说的 -3),因为 0.11 * 2⁴ = 1.76。 对于 3.1416,它是 +1,因为 3.1416/2¹ = 1.5708
然后您将在 [1,2) 范围内留下一个数字 m
以转换为二进制分数。以 r
= "1"开头。结果,然后从 m
中减去 1,然后乘以 2。
如果结果大于1,则在r
末尾写“1”,在m
中减1,否则在r末尾写“0”
。继续乘以 2,并可选择从 m
中减去 1,同时将“0”和“1”写入 r
,具体取决于您是否必须减去 1。当尾数中有足够的数字时停止。
我想你可以自己弄清楚如何进行所需的舍入模式。
关于algorithm - 将小数转换为浮点二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49490960/