對於基礎薄弱的讀者,本節的內容可能略顯晦澀和枯燥,如果覺得吃力,可以暫時跳過,用到的時候再來閱讀。但是本節所講的內容是學習編程的基礎,是程序員的基本功,即使現在不學,遲早也要回來學。
前面兩節對二進制、八進制和十六進制進行了說明,接下來講一下不同進制之間的數字是如何轉換的,這在編程中經常會用到,尤其是C語言。
其他進制向十進制轉換
二進制、八進制和十六進制向十進制轉換都是非常容易的,就是“按權相加”。
所謂“權”,也即“位權”。例如,十進制第1位的位權為10
0=1,第2位的位權為10
1=10,第3位的位權為10
2=100;而二進制第1位的位權為2
0=1,第2位的位權為2
1=2,第3位的位權為2
2=4。設數字所采用的進制為N(基數也是N),那麼第 i 位的位權為 N
(i-1)。
不同進制轉換為十進制舉例:
-
二進制:1001 = 1×23 + 0×22 + 0×21 + 1×20 = 8 + 0 + 0 + 1 = 9
-
二進制:101.1001 = 1×22 + 0×21 + 1×20 + 1×2-1 + 0×2-2 + 0×2-3 + 1×2-4 = 4 + 0 + 1 + 0.5 + 0 + 0 + 0.0625 = 5.5625
-
八進制:0302 = 3×82 + 0×81 + 2×80 = 192 + 0 + 2 = 194
-
八進制:0302.46 = 3×82 + 0×81 + 2×80 + 4×8-1 + 6×8-2 = 192 + 0 + 2 + 0.5 + 0.09375= 194.59375
-
十六進制:0Xea7 = 14×162 + 10×161 + 7×160 = 3751
十進制轉換為二進制——輾除法
上節的表格中給出了簡單的十進制和二進制的轉換關系,要想獲得更多的轉換關系,可以使用輾除法。輾除法也就是“除模取余”法。除模取余就是將一個幾進制的數轉化成另一個進制時, 另一個進制的基數就是模,用將要轉化的進制數除以模,取它的余數。
下圖以十進制的“19”轉換為二進制為例進行講解:
圖1:19 轉換為二進制
如圖所示,以2為除數,一直相除下去,直到商為0,余數則為求得的二進制數。
注意:余數要倒序排列,也就是說,最先求得的余數排在二進制的最後面,最後求得的余數排在二進制的最前面。上面的例子中,最後求得的二進制數為 10011。
雖然其他進制也可以按照輾除法來轉換,但是比較麻煩,下面介紹更簡單的方法。
二進制和八進制的轉換
二進制向八進制的轉換是每三位二進制數轉換為一位八進制數,運算的順序是從低位向高位依次進行,高位不足三位用零補充。以二進制“1011101”為例,如下圖所示:
圖2:二進制轉八進制
轉換的結果為:1011101 = 0135
八進制向二進制轉換的思路是八進制的一位轉換為二進制的三位,運算的順序是從低位向高位依次進行。同樣以八進制“0135”為例,如下圖所示:
圖3:八進制轉二進制
轉換的結果為:0135 = 1011101
二進制和十六進制的轉換
二進制向十六進制轉換時,四位轉換成十六進制的一位,運算的順序是從低位向高位依次進行,高位不足四位用零補。以“1110011”轉換成十六進制為例,如下圖所示:
圖4:二進制轉十六進制
轉換的結果為:1001011101 = 0X25D
十六進制向二進制轉換,就是把十六進制的一位轉換成二進制的四位,注意運算的順序是從低位向高位依次進行。同樣以十六進制“0X25D”為例,如下圖所示:
圖5:十六進制轉二進制