簡體   English   中英

將十進制數轉換為二進制數

[英]Converting a decimal number into binary

我目前正在閱讀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的剩余部分。

既然你已經確定有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放在那里。現在沒有什么了 - 你已經完成了。)

我有一種可怕的感覺,這可能比澄清更令人困惑,但無論如何,這就是我的想法。

剩下的就是22。
150/128 = 1余數22

你需要做integer除法。

// Floating point
150 ÷ 128 = 1.171875

// Integer
150 ÷ 128 = 1 remainder 22

所以,你寫下1並將22帶到下一步。

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

該示例使用整數運算,並且150 - 128 => 22

這個例子是故意代數的,但大多數現代語言都定義了按位二元運算符。 (據推測,如果我們構建非二進制計算機,這些將被模擬。)因此實際上以這種方式進行二進制轉換是非常罕見的。 更典型的是,您將使用<<>>&來直接檢測各個位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM