進製轉換的原理

2021-07-27 04:56:21 字數 2670 閱讀 6559

「十進位制數 2127 代表什麼?」

這或許是個很弱智的問題,但是

(2127)10

實際上表示:2×

103+1

×102+

2×101

+7×10

0 這麼寫雖然看起來沒什麼卵用,但我想說明的是:第乙個位置的 「2」 和第三個位置的 「2」 並不是乙個 「2」,第乙個表示的是

2000

,即 2×

103,而另乙個表示的是

20 ,即 2×

101。

不同位置的 「2」 雖然都是 「2」,但是它們代表的 「大小「 卻並不相同。

我不清楚設計者為什麼會創造這樣的記數方式,但是這種方法確實可以有效地幫助我們理解其他進製的數,例如……

「二進位制數 11010 代表多少?」

儘管很難一眼就看出這是多少,但是如果我們把它也轉變為上面的寫法,即:

(11010)2

===1

×24+

1×23

+0×2

2+1×

21+0

×2016

+8+2

(26)10

這樣或許就能更容易地理解這個二進位制數到底是「多少」,而實際上這也是二進位制數轉化為十進位制數的方法。

所謂 「進製」 就是 「進製的方法」。十進位制是逢十進位,用 0~9 十個數字,二進位制是逢二進一,用 0、1 兩個數字。同樣 n 進製就是逢 n 進一,用 0~n-1 共 n 個符號表示。

乙個 n 進製數從右往左數第 m 個數

a 代表的 」大小「 就是 a×

nm−1

,將各個位上的數所代表的 」大小」 加起來就是這個數實際的 「大小」 。

那麼十進位制數如何轉換為二進位制數呢?

一種十分常見的方法是 「短除法」,即 「除二取餘,商零為止,餘數倒排」。

比如說,將 (26

)10轉化為二進位制數的過程為:26÷

2=13÷

2=6÷

2=3÷

2=1÷

2=13…

06…1

3…01

…10…

1 像上面這樣,不斷地除以 2,直到商為 0 為止,然後將得到的餘數倒過來排列,就得到結果:(26

)10=(

11010)2

假設有乙個二進位制數 abcd,其中每個字母代表乙個 0 或 1 。我們假設這個數等於十進位制數 12 吧。那麼我們要怎麼計算 a、b、c、d 到底是 0 還是 1 呢?

按照第一節中數的意義,將 abcd 從二進位制轉換成十進位制,那麼會得到:(a

bcd)

2==a

×23+

b×22

+c×2

1+d×

20(12

)10於是我們得到了乙個等式:a×

23+b

×22+

c×21

+d×2

0=12

不過這是個一元四次方程,似乎並不能得到唯一解……

但是實際上我們忽略了兩個重要的約束條件:

別小看這點條件,它們的作用可是頂得上兩個等式的!

首先觀察一下上述等式,我們發現,除了 d 之外,a、b、c 都有共同的係數 2,於是我們就可以對前三項進行因式分解:2×

(22a

+21b

+c)+

d=12

我們將括號內的內容看成乙個整體,就叫

k 吧,不難證明

k是個正整數,於是式子就簡化成:2k

+d=12

而我們知道 d 不是 0 就是 1,

k 又是正整數,那麼這個式子不就等價於:12÷

2=k…

d是吧?d 就是 12 除以 2 的餘數,顯然 d 就是 0 了!(因為 d 是 1 的話 k 就不可能是整數)那麼 k 就是 6,即:22

a+21

b+c=

6 這個式子很熟悉是不是,除了最後一項,前幾項都有公共係數 2,於是我們又可以按照前面的套路進行因式分解:2(

2a+b

)+c=

6 於是我們可以用與前面完全相同的方式處理,得到:6÷

2=(2

a+b)

…c於是就得出 c 是 0,2a

+b是 3 。

仔細看看,這不是就和短除法一模一樣的過程嗎?

沒錯,可以這樣一直算到頭,並且證明方法完全相同:2a

+b=3

可得出 a 和 b,都是 1,而 c、d 都是 0,於是最終得到:(12

)10=(

1100)2

所以說,短除法不過是簡單的逆運算,因為有了正整數和大小的約束條件,即使只有乙個等式,我們可以得出唯一的正確解。

不僅是十進位制和二進位制,其他進製,甚至是負進製。只要理解了通過因式分解可以將等式變成整數的帶餘數除法等式,再進行遞迴計算餘下部分這一思路,剩下的只是加加減減上的不同。

有興趣的同學可以試試 這道負進製轉換的題,當時想了半天的說……(noip2000 d1t1 我竟然都做得這麼費勁/(ㄒoㄒ)/~~)

進製轉換原理分析

我們最熟悉的進製就是從小就學的十進位制,逢十進一 如 然而在計算機cpu操作都是二進位制資料0或1,這樣就需要我們進行進製的的轉換,這裡的二進位制就是,逢二進一 如 八進位制為,逢八進一 如 十六進製制為,逢十六進一 如 進製轉換原理 進製轉換分 整數部分和小數部分 1,整數間十進位制轉其他格式 十...

python3進製轉換原理

二 python3常用進製轉換辦法 1 轉換函式 三 參考資料 1 任意進製轉換為十進位制 如果數字在n進製下表示為d1d 2 dm 1dm d d d d d1 d2 dm 1 dm 那麼轉換為十進位制 n um dm n0 d m 1 n1 d2 nm 2 d1 nm 1 num d n d n...

原理之一,進製轉換

原理之一,進製轉換 日常生活中採用個數字都是十進位制,而計算機採用的是運算更簡單 易實現且可靠,為邏輯設計提供了有力途經的二進位制,除此之外還有八進位制和十六進製製作為二進位制的縮寫。進製 逢n 進一,n 是每種進製計數制表示一位數所需要的符號數目為基數。二進位制 逢二進一,借一當二,包含的數字 0...