我目前正在阅读 Charles Petzold 的书《Code》。在其中,他解释了如何使用以下模板将十进制数转换为二进制数:
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
÷128 ÷64 ÷32 ÷16 ÷8 ÷4 ÷2 ÷1
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
在书中,他对如何使用模板的解释如下:
“将整个十进制数(小于或等于255)放入上方的框中
左角。将该数字(被除数)除以第一个除数 (128),如下所示
表明的。将商放入下面的框中(左下角的框),然后
其余的放在右边的框中(顶行的第二个框)。第一个余数是下一个计算的被除数,该计算使用除数 64。以相同的方式继续通过模板。
请记住,每个商要么为 0,要么为 1。如果被除数小于除数,则商为 0,余数就是被除数。如果被除数大于或等于除数,则商为 1,余数为除数 - 除数。以下是 150 的操作方法:”
[150] [22] [22] [22] [6 ] [6 ] [2 ] [0 ]
÷128 ÷64 ÷32 ÷16 ÷8 ÷4 ÷2 ÷1
[1 ] [0 ] [0 ] [1 ] [0 ] [1 ] [1 ] [0 ]
但我很困惑!当我按照指示进行计算时,我得到了截然不同的结果。我正在做的事情如下:
150 ÷ 128 =1.171875(我没看到上面的 22 从哪里来?)所以,我在 150 下面的框中放了一个 1,然后携带171875并用它作为下一次计算的被除数,这当然会让我陷入各种各样的问题,最终,不是二进制数 10010110!
有人能告诉我哪里出错了吗?
22 是 150/128 的余数。
由于您已经确定 150“中”有 1 128,并为该位赋予了一个值,因此您可以忘记 150“中”的 128,因此您将其从 150 中取出,留下我们的 22。然后是时候值 64 的数字:64 不会进入 22,因此该数字是 0。对于值 32 的数字也是如此。然后,对于值 16 的数字:16 进入 22 一次,所以那里有一个 1 数字,现在你已经完成了 22 中的 16,所以把它拿走——留下 6。依此类推。
(考虑一个类似的以 10 为基数的情况,比方说 309。取 100 列;309 中有 3 100 个,所以你在那里放一个 3。现在还剩下 9。然后取 10 列;9 中有 0 个 10 ,所以你在那里放了一个 0。然后是 1 列:9 有 9 个 1,所以你在那里放了一个 9。现在什么都没有剩下了——你就完成了。)
我有一种可怕的感觉,这可能会让人困惑而不是澄清,但无论如何我就是这么想的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)