語法書 / AA 競程語法書 下冊 / 第十六單元 / 二進制與十六進制

16.2 二進制與十六進制

二進制對電腦友善,對人類就辛苦了:3072 十進制只要 4 位,二進制卻是 (110000000000)_2——一長串 01,讀寫都容易眼花。工程師的解法是找一個「跟二進制無縫換算」的縮寫進制:十六進制(hexadecimal)

十六進制滿 16 進位,每格放 0 \sim 1510 \sim 15 就用上一節說的字母慣例:

字元 A B C D E F
數值 10 11 12 13 14 15

4 個二進制位=1 個十六進制位

十六進制被選中的原因藏在 2^4 = 16 這條等式裡:4 個二進制位總共有 16 種組合,恰好一一對應十六進制的 16 種數字。所以二進制從右往左每 4 位分一組,每組直接查表換成 1 個十六進制位,反方向也一樣逐位展開——完全不用經過十進制:

十六進制 二進制 十六進制 二進制
0 0000 8 1000
1 0001 9 1001
2 0010 A 1010
3 0011 B 1011
4 0100 C 1100
5 0101 D 1101
6 0110 E 1110
7 0111 F 1111

實際換一個:(11010111)_2 從右往左每 4 位分組是 11010111,查表分別是 D7,所以

(11010111)_2 = (\mathrm{D7})_{16}

不放心可以驗算:兩邊各自展開位值,都是 215

這就是工程上愛用十六進制的原因:長度縮成四分之一,卻還能逐位對回二進制。十進制沒有這種好事——10 不是 2 的次方,換算得整個數重算。順帶把上冊 2.2 的知識接上:1 位元組=8 個位元=恰好 2 個十六進制位,所以一個位元組的內容總能寫成兩個十六進制字元。你在生活中其實看過它——網頁的顏色碼 #00A896,就是紅、綠、藍三個位元組各用兩個十六進制位寫出來的。

動手試試看:把 (10111100)_2 分組換成十六進制(每 4 位一組查表),再用 0b101111000x 你的答案各寫一個字面常數印出來,確認兩個都是 188