在二進制 (基數為2) 數字系統中有兩個可能值,在每一位上,通常表示為0或1。相反,在十進制 (基數為10) 數字系統中,在每一位上,有10個可能值 (0,1,2,3,4,5,6,7,8, 或9)。
在使用不同的數字系統時,為了避免混亂的產生,可將基數標記在某個數的下標位置。例如,可以把二進制數標明為 "基數為2"的數,即寫作100111002。而十進制數156可寫作15610,並讀作"以10為基數的一百五十六"。
因為二進制系統是電子計算機的內部語言,因此真正的程序員應該掌握如何把二進制數轉換為十進制數。而如果首先學習把十進制數轉換為二進制數則相對更困難。
注意:這里只討論數值的轉換而非ASCII代碼的轉換。
方法1:按位記數法
-
1在本例中,我們將把二進制數100110112轉換為十進制數。從左到右地列出2的冪。從2 0開始,結果為"1"。每向右移一位,就對其指數加1。列出的元素個數應等於二進制數的位數。在本例中,10011011有8位數字,因此應列出的8個元素:128, 64, 32, 16, 8, 4, 2, 1
-
2把二進制數上的每一位數字對應地寫到列表下方。
-
3從右邊開始,畫出線條,用於把二進制數中連續的數字和其上方的2的冪連接起來。從右邊開始,畫一條線,把二進制數的第一個數字和2的第一個冪值連接起來。然后,畫一條線,把二進制數的第二個數字和2的第二個冪值連接起來。依次類推,畫出線條把每一個數字和對應的冪值連接起來。
-
4掃描二進制數中的每一位數字。如果對應的數字為1,則在線條下方寫下對應的2的冪值。如果對應的數字為0,則在線條下方寫下0。
-
5把線條下方的數相加。所得總和為155。這就是二進制數10011011對應的十進制數。或者寫成基數下標的形式:
-
6以上方法熟悉后,你將記得2的每一個冪值,因此可以省略第1步。
方法2:雙倍法
-
1該方法不需要使用冪運算。因此,當你通過心算轉換較大的數值時,該方法更簡單,因為你只需要記下部分和。
-
2從給定二進制數最左邊的數字開始。對於每一位數字,你向右移動,對之前所得總和乘以2並加上當前數值。例如,把1011001 2轉換為十進制數,我們將采用如下步驟:
-
31011001 → 0 * 2 + 1 = 1
-
41011001 → 1 * 2 + 0 = 2
-
51011001 → 2 * 2 + 1 = 5
-
61011001 → 5 * 2 + 1 = 11
-
71011001 → 11 * 2 + 0 = 22
-
81011001 → 22 * 2 + 0 = 44
-
91011001 → 44 * 2 + 1 = 8910
-
10和按位記數法一樣,本方法經調整后也能把基於任何基數的數轉換為十進制數。在這里采用雙倍法因為這里給定的數是以2為基數的。如果給定的數是基於不同的基數,則應本方法中的2換成對應的基數。例如,如果給定數是以37為基數,則你在計算時應把*2換為*37。而最終的結果則總是對應的十進制數(基數10)。