數字系統 (Numeral system),
又稱 記數系統,是用來表示『數』的方式。
常依以下方式分類:
- 進位制: 十進位、二進位、八進位、十六進位…
- 寫法: 中文數字、阿拉伯數字、羅馬數字…

簡介
十進制 (Decimal)
人類最常使用的就屬 十進制 (Decimal, Dec) 囉!
即是以 『10』 做為進位基底 (base) 的數字系統,逢十進位,
因次又稱為 base-ten、base 10。

六十進制 (Sexagesimal)
六十進制 (Sexagesimal),則多用於表達時間、角度…,
如 「一小時為 60 分鐘,一分鐘為 60秒」,又稱為 base 60。

二進制 (Binary)
在計算機 (電腦) 硬體中,指令是以一連串『高』與『低』的電子訊號來保持,
當電壓足夠,就呈現『ON』; 電壓不足,則呈現『OFF』,其亦能以數字表示之。

二進位是以 2 為基底的數字系統。數位電路會用兩個可區分的電壓範圍表示 0 與 1;哪個範圍叫高或低、是否採正邏輯,都取決於電路與介面規格。0、1 不等於負/正電荷,也不天然等於關/開。
在數位系統裡,位元 (bit, binary digit) 是可表示 0 或 1 的基本資訊單位;資料會以一串位元依指定格式表示與保存。
二進制 (Binary),是本文的主要重點,
如出一徹,又稱為 base 2。
讓電腦硬體直接辨識、執行,且符合指令格式 (instruction format) 的二進位指令集,
則稱為 機器語言 (machine language)。
因此有了這個笑話😂:
神秘的電腦高手,用 0 1 0 1… 寫出作業系統。
例:
十進制的 9487,
二進制 表示為:『 10010100001111 』,
最左邊的位數,稱為 最高有效位元 (Most Significant Bit, MSB),
最右邊的位數,稱為 最低有效位元 (Least Significant Bit, LSB)。
八進制 (Octal) 與 十六進制 (Hexadecimal)
不幸的是,二進制 (Binary) 極度不易閱讀,
為了利於使用、溝通,需找到更適當的進位制。
二、八、十六都是 2 的冪次基底:一個八進位數字剛好對應 3 個 bit,一個十六進位數字剛好對應 4 個 bit。這種分組關係讓它們比十進位更方便閱讀位元資料;hex 在除錯、位址與位元旗標中尤其常見。
例如:十進制中 『 9487 』 這個數字,
二進制 需表示為: 『 10010100001111 』…,
八進制:『 22417 』,
十六進制: 『 250F 』。
八進制 (Octal)
八進制 (Oct),base 8,
不如 十六進制 (Hex) 使用的頻繁,
但在許多領域及場合仍會出現,
由以下數字表示,逢八進位:
(ex: 0、1、2、3、4、5、6、7、10、11、12、13、14、15、16、17、20…)
十六進制 (Hexadecimal)
十六進制 (Hex),base 16,
可說是資訊領域用的最頻繁的進制,
(例如: 記憶體傾印 memory dump、HTML or CSS 的色碼 [註1])
值得注意的是,其由以下數字及字母表示,逢十六進位:
(ex: 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、
10、11、12、13、14、15、16、17、18、19、1A、1B、1C、1D、1E、1F、20…)
(A~F 可為大小寫)
務必注意!! 9 再來是 『 A 』,而非 『 10 』!!!
[註1]:
HTML 為用於建立網頁的標記語言,CSS 則為階層式樣式表。
可藉下圖心領神會 😂
表示法
如果每次都得這樣寫,那也太累了:
十進位的: 『 9487 』,
二進位表示為: 『 10010100001111 』,
八進位: 『 22417 』,
十六進位: 『 250F 』。
表示為英文,似乎也沒比較好:Decimal: 『 9487 』,
Binary: 『 10010100001111 』,
Octal: 『 22417 』,
Hex: 『 250F 』。
下標
為了方便書寫,通常使用下標表示法,
也就是先前提過的 基底 (base) 概念,直接在 數字的右下角 加上目前的進制即可!
想更清楚的話,可先加上小括弧,再加下標。
ex:948710 = (10010100001111)₂ = (22417)8 = (250F)16
是不是豪棒棒呢!
然而,這只方便書寫,在 實務開發上,仍 不利於使用,
因此不同的作業系統、程式語言、應用領域..
其表示方法不盡相同,以下舉幾個例子。
首字法
故名思義,在數字後方,加上其 進制 的 英文首字。
八進制 (oct) ,即加上小寫『o』或 大寫『O』(ex: 22417o),
但其跟 數字 0 過於相似,因此較少使用。
十六進制 (hex),即加上小寫『h』或 大寫『H』(ex: 250Fh),
若該數以字母起首,會在前面增加一個 數字「0」 (ex: 0A1H = 161₁₀)。
前綴法
也就是在數字前,加上前綴字,藉此辨認進制,
常用於各種 程式語言。
八進制 (oct),時常會以 數字『0』做為前綴,
但容易與 十進位 (dec) 產生混淆,實務上較少使用。
十六進位 (Hex) ,則以『0X』做為前綴。
譬如,常見的程式語言如 C/C++、Java、Python…,
皆使用字首「0x」,來表示十六進位 (ex: 0x7fff54b6bab8)。
程式範例 (Java):public class Main { public static void main(String[] args) { int dec = 9487; // 十進制 int binary = 0b10010100001111; // 二進制 前綴表示法 0b // (在 Java 7 後,可使用『底線』幫助閱讀,稱為 Underscores in Numeric Literals) int binary2 = 0b10_0101_0000_1111; // 二進制 前綴表示法二 0b int oct = 022417; // 八進制 前綴表示法 0 (不建議使用) int hex = 0x250F; // 十六進制 前綴表示法 0x System.out.println("十進制: " + dec); System.out.println("二進制 前綴表示法: " + binary); System.out.println("二進制 前綴表示法二: " + binary2); System.out.println("八進制 前綴表示法: " + oct); System.out.println("十六進制 前綴表示法: " + hex); } } /* * Result: * * 十進制: 9487 * 二進制 前綴表示法: 9487 * 二進制 前綴表示法二: 9487 * 八進制 前綴表示法: 9487 * 十六進制 前綴表示法: 9487 * */
其他像是:
CSS 的 #E91E63 是以十六進位寫出的色彩分量表示法;
URL 的 %20 則是 percent-encoding,以十六進位表示一個 byte。兩者都借用十六進位,但不是一般數值的進制前綴。
總結
進制 是每位開發者必備的基本功,本篇僅做了 進制 的粗略介紹,
尚未提及轉換、負數、運算…等,近日有閒再補上囉 😃。
範例原始檔
最後,附上一張 進制 轉換表 供參考:
十進制 二進制 八進制 十六進制 0 0000 0 0 1 0001 1 1 2 0010 2 2 3 0011 3 3 4 0100 4 4 5 0101 5 5 6 0110 6 6 7 0111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F 16 10000 20 10





在〈進制簡介 (二進制、八進制、十進制、十六進制)〉中有 2 則留言