在十進制中,個位的1代表100=1,十位的1代表101=10,百位的1代表102=100,所以
123=1×102+2×101+3×100
同樣道理,在二進制中,個位的1代表20=1,十位的1代表21=2,百位的1代表22=4,所以
(A3A2A1A0)2=A3×23+A2×22+A1×21+A0×20
如果二進制和十進制數出現在同一個等式中,為了區別我們用(A3A2A1A0)2這種形式表示A3A2A1A0是二進制數,每個數字只能是0或1,其它沒有套括號加下標的數仍表示十進制數。對於(A3A2A1A0)2這樣一個二進制數,最左邊的A3位稱為最高位(MSB,Most Significant Bit),最右邊的A0位稱為最低位(LSB,Least Significant Bit)。以後我們遵循這樣的慣例:LSB稱為第0位而不是第1位,所以如果一個數是32位的,則MSB是第31位。上式就是從二進制到十進制的換算公式。作為練習,請讀者算一下(1011)2和(1111)2換算成十進制分別是多少。
下面來看十進制怎麼換算成二進制。我們知道
13=1×23+1×22+0×21+1×20
所以13換算成二進制應該是(1101)2。問題是怎麼把13分解成等號右邊的形式呢?注意到等號右邊可以寫成
13=((((0×2+13)×2+12)×2+01)×2+10
我們將13反覆除以2取餘數就可以提取出上式中的1101四個數字,為了讓讀者更容易看清楚是哪個1和哪個0,上式和下式中對應的數字都加了下標:
13÷2=6...10
6÷2=3...01
3÷2=1...12
1÷2=0...13
把這四步得到的餘數按相反的順序排列就是13的二進製表示,因此這種方法稱為除二反序取余法。
計算機用二進製表示數,程序員也必須習慣使用二進制,但二進制寫起來太囉嗦了,所以通常將二進制數分成每三位一組或者每四位一組,每組用一個數字表示。比如把(10110010)2從最低位開始每三位分成一組,10、110、010,然後把每組寫成一個十進制數字,就是(262)8,這樣每一位數字的取值範圍是0~7,逢八進一,稱為八進制(Octal)。類似地,把(10110010)2分成每四位一組,1011、0010,然後把每組寫成一個數字,這個數的低位是2,高位已經大於9了,我們規定用字母A~F表示10~15,這個數可以寫成(B2)16,每一位數字的取值範圍是0~F,逢十六進一,稱為十六進制(Hexadecimal)。所以,八進制和十六進制是程序員為了書寫二進制方便而發明的簡便寫法,好比草書和正楷的關係一樣。