将带逗号的十进制转换为二进制

Converting decimal with comma to binary

我正在尝试将带逗号的十进制数转换为二进制数。我已经看到,如果你有例如十进制数字 5.2,你将它转换为 101.10,因为 5 是 101,2 是 10,但我看到了一种我不太明白的方法。

例如,号码 93.3125 是 0000 0101 1101 0101。为什么? 有没有其他方法可以帮助您将带逗号的小数转换为二进制?

有多种方法可以将十进制数转换为由 1 和 0 组成的字符串。你刚刚演示了其中的两个。

如果将数字(以 base-10 位表示法表示) 93.3125 转换为“二进制”(以 base-2 位表示符号) 你得到 1011101.0101

如果你将它转换成计算机语言中使用的二进制浮点格式,你会得到一个由 1 和 0 组成的字符串,可能有一个前导位表示符号,还有一些其他位表示指数——你会需要一个格式描述文件来解码。

将“5.2”翻译成“101.10”(分别翻译小数点前后的部分)对我来说是个新手,不是数学上正确的翻译的地方符号。 "5"=>"101" 是正确的,但 ".2"=>".10" 不是;十进制的“.2”是十分之二,a.k.a。五分之一,以二为基数是“.001100110011 ...”(五分之一是以二为基数的循环小数,就像三分之一是以十为基数的循环小数。)你会如何翻译“1.02”?

所以是的,有很多方法可以编码二进制数字。不同的代码有不同的用处。

您需要分别处理每个部分(小数点前后)。整数部分通过随后除以基数转换,小数部分通过随后乘以基数转换。在你的情况下 base = 2:

5.2 dec -> 5 + 0.2 dec

整数部分

5 % 2 = 1 // binary digit
5 / 2 = 2 // leftover for next iteration

2 % 2 = 0 // binary digit
2 / 2 = 1 // leftover for next iteration

1 % 2 = 1 // binary digit
1 / 2 = 0 // leftover for next iteration

不要忘记数字必须以相反的顺序使用(但是你的 5 是相同的):

5 dec = 1 0 1 bin

小数部分

0.2 * 2 = 0.4   
0.4 * 2 = 0.8   
0.8 * 2 = 1.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
...

一切都是十进制。结果的整数部分是您的数字(按顺序),小数部分留给下一次迭代。所以结果是:

0.2 dec = 0 . 0 0 1 1 0 ... bin

放在一起:

5.2 dec = 101.00110... bin