1/10(decimal) = 0.0001100110011... (binary)
我该怎么做?我应该转换为二进制然后分裂?有人能告诉我吗?
答案 0 :(得分:85)
在大学里,我这样学习:
示例:
0.1 * 2 = 0.2 -> 0
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
Result: 0.00011(0011) periodic.
答案 1 :(得分:21)
1 1 -- (dec) = ---- (bin) 10 1010 0.000110011... ------------- 1010 | 1.0000000000 1010 ------ 01100 1010 ----- 0010000 1010 ----- 01100 1010 ----- 0010
答案 2 :(得分:15)
这可能有些令人困惑,但二进制的小数位数表示2的幂的倒数(例如,1 / 2,1 / 4,1 / 8,1 / 16,第一,第二,第三和第四)小数位,分别为十进制小数,十进制位表示连续十次幂的倒数。
要回答你的问题,你需要弄清楚需要加入两个幂的倒数才能加起来达到1/10。例如:
1/16 + 1/32 = 0.09375,非常接近1/10。添加1/64会使我们结束,1/128也是如此。但是,1/256使我们更接近。所以:
0.00011001二进制= 0.09765625十进制,接近你的要求。
您可以继续添加越来越多的数字,因此答案将为0.00011001 ...
答案 3 :(得分:8)
以下是如何考虑该方法。
每次乘以2,就会将数字的二进制表示移动到1位。您已将该点后的最高位移到1s位置,因此取下该位数,它是您的分数的第一个(最高,因此最左边)数字。再做一次,你就有了下一个数字。
通过除以并将余数作为下一个数字来转换整数的基数将数字向右移动。这就是为什么你得到相反顺序的数字,最低的数字。
如GoofyBall所指出的那样,这显然可以推广到任何基数,而不仅仅是2。
要考虑的另一件事:如果你要四舍五入到N位数,请停在N + 1位数。如果数字#N + 1是1,则需要向上舍入(因为二进制数字只能是0或1,截断下一个数字1与截断5的十进制数一样不准确。)
答案 4 :(得分:6)
我花了一些时间来理解@Femaref(' s)的回答,以为我会详细说明。
<强> Elboration 强>
您想将等于1/10
的十进制0.1
转换为二进制。以0.1
作为输入开始,然后按以下步骤操作:
在这种情况下,它是:
0.00011(0011) Note: numbers within parenthesis will keep repeating (periodic)
+-------+-------+--------+---------+----------+--------+----------------------+
| input | mult | answer | decimal | fraction | binary | |
+-------+-------+--------+---------+----------+--------+----------------------+
| 0.1 | 2 | 0.2 | 0 | .2 | 0 | |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | < Repeats after this |
| 0.2 | 2 | 0.4 | 0 | .4 | 0 | |
| 0.4 | 2 | 0.8 | 0 | .8 | 0 | |
| 0.8 | 2 | 1.6 | 1 | .6 | 1 | |
| 0.6 | 2 | 1.2 | 1 | .2 | 1 | |
+-------+-------+--------+---------+----------+--------+----------------------+