转换的十进制数转换成二进制(Converting a decimal number into bin

2019-08-21 02:35发布

我目前正在读查尔斯Petzold的书“代码”。 他在文中解释了如何使用以下模板的十进制数转换成二进制转换:

                [ ]   [ ]   [ ]   [ ]   [ ]   [ ]   [ ]   [ ]
                ÷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(I没有看到在22来自以上?)所以,我放置1中的150下面的框中,然后携带171875和使用,作为被除数用于下一次计算,这当然我陷入各种各样的问题,最终,而不是二进制数10010110!

谁能告诉我,我要去哪里错了吗?

Answer 1:

图22是的一百二十八分之一百五十零剩余部分。

既然你已经确定不存在“在” 150是1 128,并给出一个值,位,你可以忘掉那“中的” 150 128,所以你把它拿走150,让我们的22。然后它的时候了数字值得64:64不进入22,这样的数字是0。同样地,对于数字值得32.然后对位身价16:16进入22一次,所以有1位出现,而现在你与“在” 22 16完成的,所以把它拿走 - 留下6等。

(考虑一个类似底座10的情况下,比方说309就拿100S列;有309 3个100秒,所以你把3那里,现在有9遗留再取10秒列;还有0 10秒9 ,所以你把0那里,然后在1秒柱:有9分1秒9,让你在把9那里,现在什么都不剩 - 大功告成)。

我有一种可怕的感觉,这可能混淆不是澄清多,但这是我怎么想也无妨。



Answer 2:

22是余数。
一百二十八分之一百五十= 1 22余



Answer 3:

你需要做的integer除法。

// Floating point
150 ÷ 128 = 1.171875

// Integer
150 ÷ 128 = 1 remainder 22

所以,你记下1并携带22到下一个步骤。



Answer 4:

128去一旦进入150 22其余。 二进制数10010110转换为十进制;

150 = (1 * 128) + (1 * 16) + (1 * 4) * (1 + 2) = 128+16+4+2

以同样的方式,我们可以打破十进制数150;

150 = (1 * 100) + (5 * 10) + (0 * 1) = 100 + 50


Answer 5:

该示例使用整数运算,以及150 - 128 => 22

这个例子是故意的代数,但是大多数现代语言定义了逐位二进制运算符。 (据推测,如果我们建立非二进制计算机上,这些将被效仿。)所以这将是非常罕见的,以真正做到二进制转换的方式。 更典型的,你会使用<<>> ,并&到各个位直接检测。



文章来源: Converting a decimal number into binary