将十进制数转换为二进制数

cw8*_*w84 2 algorithm binary decimal

我目前正在阅读Charles Petzold的书"Code".在其中,他解释了如何使用以下模板将十进制数转换为二进制数:

                [ ]   [ ]   [ ]   [ ]   [ ]   [ ]   [ ]   [ ]
                ÷128  ÷64   ÷32   ÷16   ÷8    ÷4    ÷2    ÷1
                [ ]   [ ]   [ ]   [ ]   [ ]   [ ]   [ ]   [ ]
Run Code Online (Sandbox Code Playgroud)

在书中,他对如何使用模板的解释如下:

"将整个十进制数字(小于或等于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 ]
Run Code Online (Sandbox Code Playgroud)

但我很困惑!当我按照指示进行计算时,我得到了非常不同的结果.我正在做的是如下:

150÷128 = 1.171875(我看不到22从哪里来?)所以,我在150下面的方框中放置一个1,然后携带171875并将其用作下一次计算的红利,当然让我陷入各种各样的问题,最终,不是二进制数10010110!

谁能告诉我哪里出错了?

小智 7

22是150/128的剩余部分.

既然你已经确定有1 128"in"150,并给出了该位的值,那么你可以忘掉那个"在"150中的128,所以你把它从150分开,离开我们的22.然后是时候了64:64的数字不会进入22,所以该数字为0.而且数字值为32.然后数字值16:16进入22,所以那里有1位数,现在你完成了16"in"22,所以把它带走 - 留下6.依此类推.

(考虑一个类似的基础10的情况,比方说309.拿100s列; 309中有3 100个,所以你在那里放3个.现在剩下9个.然后取10s列; 9个中有0个10个,所以你把0放在那里.然后是1s栏:9中有9个1,所以你把9放在那里.现在没有什么了 - 你已经完成了.)

我有一种可怕的感觉,这可能比澄清更令人困惑,但无论如何,这就是我的想法.


Joh*_*ooy 5

剩下的就是22.
150/128 = 1余数22