數字進位制轉換器
數字系統詳解:從二進位到羅馬數字及其他
數字系統是數學、計算機科學和人類歷史的基礎。從電腦的二進位邏輯到我們日常使用的十進位系統,理解不同的進位制能讓我們深入了解數據表示、程式設計和古代文明。本指南涵蓋了 20 多種數字系統,包括二進位、十六進位、羅馬數字和特殊編碼。
基本概念:數字系統如何運作
基數 (Radix)
任何數字系統的基礎
基數決定了使用多少個獨立數字以及位值如何增加。基數 10 使用數字 0-9。基數 2(二進位)使用 0-1。基數 16(十六進位)使用 0-9 加上 A-F。
在基數 8(八進位)中:157₈ = 1×64 + 5×8 + 7×1 = 111₁₀
數字集
在數字系統中代表值的符號
每個基數都需要從 0 到(基數-1)的獨立符號。二進位使用 {0,1}。十進位使用 {0-9}。十六進位擴展到 {0-9, A-F},其中 A=10...F=15。
十六進位中的 2F3₁₆ = 2×256 + 15×16 + 3 = 755₁₀
基數轉換
在不同系統之間轉換數字
轉換涉及使用位置值擴展到十進位,然後轉換到目標基數。從任何基數到十進位:總和為 數字×基數^位置。
1011₂ → 十進位:8 + 0 + 2 + 1 = 11₁₀
- 每個基數使用從 0 到(基數-1)的數字:二進位 {0,1}、八進位 {0-7}、十六進位 {0-F}
- 位置值 = 基數^位置:最右邊是 基數⁰=1,其次是 基數¹,然後是 基數²
- 基數越大 = 表示越緊湊:255₁₀ = 11111111₂ = FF₁₆
- 計算機科學偏好 2 的冪:二進位 (2¹)、八進位 (2³)、十六進位 (2⁴)
- 羅馬數字是非位置性的:V 無論在哪個位置都等於 5
- 基數 10 的主導地位來自人類解剖學(10 根手指)
四種必要的數字系統
二進位 (基數 2)
電腦的語言 - 只有 0 和 1
二進位是所有數位系統的基礎。每個電腦操作都簡化為二進位。每個數字(位元)代表開/關狀態。
- 數字:{0, 1} - 最小符號集
- 一個位元組 = 8 位元,在十進位中表示 0-255
- 2 的冪是整數:1024₁₀ = 10000000000₂
- 加法簡單:0+0=0, 0+1=1, 1+1=10
- 用於:CPU、記憶體、網路、數位邏輯
八進位 (基數 8)
使用數字 0-7 的緊湊二進位表示
八進位將二進位數字以三個為一組(2³=8)。每個八進位數字 = 正好 3 個二進位位元。
- 數字:{0-7} - 不存在 8 或 9
- 每個八進位數字 = 3 個二進位位元:7₈ = 111₂
- Unix 權限:755 = rwxr-xr-x
- 歷史:早期的迷你電腦
- 現今較少見:十六進位已取代八進位
十進位 (基數 10)
通用的人類數字系統
十進位是全球人類溝通的標準。其基數 10 的結構是從用手指計數演變而來。
- 數字:{0-9} - 十個符號
- 對人類而言自然:10 根手指
- 科學記號法使用十進位:6.022×10²³
- 貨幣、測量、日曆
- 電腦在內部轉換為二進位
十六進位 (基數 16)
程式設計師對二進位的簡寫
十六進位是緊湊表示二進位的現代標準。一個十六進位數字 = 正好 4 個位元 (2⁴=16)。
- 數字:{0-9, A-F} 其中 A=10...F=15
- 每個十六進位數字 = 4 個位元:F₁₆ = 1111₂
- 一個位元組 = 2 個十六進位數字:FF₁₆ = 255₁₀
- RGB 顏色:#FF5733 = 紅(255) 綠(87) 藍(51)
- 記憶體位址:0x7FFF8A2C
快速參考:相同數字,四種表示法
了解相同的值在不同基數中如何呈現,對於程式設計至關重要:
| 十進位 | 二進位 | 八進位 | 十六進位 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 8 | 1000 | 10 | 8 |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
| 64 | 1000000 | 100 | 40 |
| 255 | 11111111 | 377 | FF |
| 256 | 100000000 | 400 | 100 |
| 1024 | 10000000000 | 2000 | 400 |
數學與替代基數
除了計算機科學的標準基數外,其他系統也有獨特的應用:
三進位 (基數 3)
數學上最有效率的基數
三進位使用數字 {0,1,2}。是表示數字最有效率的基數(最接近 e=2.718)。
- 數學效率最佳
- 平衡三進位:{-,0,+} 對稱
- 模糊系統中的三元邏輯
- 提議用於量子計算(三進位元)
十二進位 (基數 12)
十進位的實用替代方案
基數 12 的因數(2,3,4,6)比 10(2,5)多,簡化了分數。用於時間、打、英寸/英尺。
- 時間:12 小時制時鐘、60 分鐘 (5×12)
- 英制:12 英寸 = 1 英尺
- 分數更容易:1/3 = 0.4₁₂
- 十二進位學會倡導採用
二十進位 (基數 20)
以二十為單位計數
基數 20 系統是從計算手指加腳趾演變而來。馬雅、阿茲特克、凱爾特和巴斯克等例子。
- 馬雅曆法系統
- 法語:quatre-vingts (80)
- 英語:'score' = 20
- 因紐特傳統計數法
基數 36
最大字母數字基數
使用所有十進位數字(0-9)加上所有字母(A-Z)。緊湊且人類可讀。
- URL 縮短器:緊湊的連結
- 授權金鑰:軟體啟用
- 資料庫 ID:可輸入的識別碼
- 追蹤碼:包裹、訂單
古代與歷史數字系統
羅馬數字
古羅馬(西元前 500 年 - 西元 1500 年)
主宰歐洲 2000 年。每個符號都有固定值:I=1, V=5, X=10, L=50, C=100, D=500, M=1000。
- 仍在使用:時鐘、超級盃、大綱
- 沒有零:計算困難
- 減法規則:IV=4, IX=9, XL=40
- 有限:標準最多到 3999
- 被印度-阿拉伯數字取代
六十進位 (基數 60)
古巴比倫(西元前 3000 年)
現存最古老的系統。60 有 12 個因數,使分數更容易。用於時間和角度。
- 時間:60 秒/分鐘,60 分鐘/小時
- 角度:360° 圓,60 弧分
- 可除性:1/2, 1/3, 1/4, 1/5, 1/6 皆可整除
- 巴比倫天文計算
計算機專用編碼
二進碼十進數 (BCD)
每個十進位數字編碼為 4 位元
BCD 將每個十進位數字(0-9)表示為 4 位元的二進位。392 變成 0011 1001 0010。避免了浮點數錯誤。
- 金融系統:精確的十進位
- 數位時鐘和計算機
- IBM 主機:十進位單元
- 信用卡磁條
格雷碼
相鄰值僅相差一個位元
格雷碼確保連續數字之間只有一個位元發生變化。對於類比-數位轉換至關重要。
- 旋轉編碼器:位置感測器
- 類比-數位轉換
- 卡諾圖:邏輯簡化
- 錯誤更正碼
實際應用
軟體開發
程式設計師每天都與多種基數打交道:
- 記憶體位址:0x7FFEE4B2A000 (十六進位)
- 位元旗標:0b10110101 (二進位)
- 顏色代碼:#FF5733 (十六進位 RGB)
- 檔案權限:chmod 755 (八進位)
- 除錯:hexdump、記憶體檢查
網路工程
網路協定使用十六進位和二進位:
- MAC 位址:00:1A:2B:3C:4D:5E (十六進位)
- IPv4:192.168.1.1 = 二進位表示法
- IPv6:2001:0db8:85a3:: (十六進位)
- 子網路遮罩:255.255.255.0 = /24
- 封包檢查:Wireshark 十六進位
數位電子學
二進位層級的硬體設計:
- 邏輯閘:AND, OR, NOT 二進位
- CPU 暫存器:64 位元 = 16 個十六進位數字
- 組合語言:十六進位的操作碼
- FPGA 程式設計:二進位流
- 硬體除錯:邏輯分析儀
數學與理論
數論探索各種屬性:
- 模數運算:各種基數
- 密碼學:RSA、橢圓曲線
- 碎形生成:康托爾集三進位
- 質數模式
- 組合數學:計數模式
精通基數轉換
任何基數 → 十進位
使用位置值展開:
- 識別基數和數字
- 從右到左分配位置 (0, 1, 2...)
- 將數字轉換為十進位值
- 相乘:數字 × 基數^位置
- 將所有項相加
十進位 → 任何基數
重複除以目標基數:
- 將數字除以目標基數
- 記錄餘數(最右邊的數字)
- 再次將商數除以基數
- 重複直到商數為 0
- 從下到上讀取餘數
二進位 ↔ 八進位/十六進位
將二進位位元分組:
- 二進位 → 十六進位:以 4 位元為一組
- 二進位 → 八進位:以 3 位元為一組
- 十六進位 → 二進位:將每個數字擴展為 4 位元
- 八進位 → 二進位:每個數字擴展為 3 位元
- 完全跳過十進位轉換!
快速心算
常見轉換的技巧:
- 2 的冪:記住 2¹⁰=1024, 2¹⁶=65536
- 十六進位:F=15, FF=255, FFF=4095
- 八進位 777 = 二進位 111111111
- 加倍/減半:移動二進位
- 使用計算機的程式設計師模式
有趣的事實
巴比倫的基數 60 沿用至今
每當你看時鐘,你都在使用一個有 5000 年歷史的巴比倫基數 60 系統。他們選擇 60 是因為它有 12 個因數,使分數計算更容易。
火星氣候探測者號災難
1999 年,NASA 價值 1.25 億美元的火星探測者號因單位轉換錯誤而摧毀——一個團隊使用英制單位,另一個使用公制單位。這是在精確性方面一個代價高昂的教訓。
羅馬數字中沒有零
羅馬數字沒有零也沒有負數。這使得高等數學幾乎不可能,直到印度-阿拉伯數字(0-9)徹底改變了數學。
阿波羅計畫使用八進位
阿波羅導引電腦以八進位(基數 8)顯示所有內容。太空人背誦了將人類送上月球的程式的八進位代碼。
十六進位中的 1670 萬種顏色
RGB 顏色代碼使用十六進位:#RRGGBB,其中每個值為 00-FF (0-255)。這在 24 位元全彩中提供了 256³ = 16,777,216 種可能的顏色。
蘇聯的三進位電腦
蘇聯研究人員在 1950-70 年代建造了三進位(基數 3)電腦。Setun 電腦使用 -1, 0, +1 邏輯而非二進位。最終二進位基礎設施獲勝。
轉換最佳實踐
最佳實踐
- 了解上下文:二進位用於 CPU 操作,十六進位用於記憶體位址,十進位用於人類溝通
- 記住關鍵對應:十六進位到二進位 (0-F)、2 的冪 (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024)
- 使用下標符號:1011₂、FF₁₆、255₁₀ 以避免歧義(15 可能是十五或二進位)
- 將二進位數字分組:4 位元 = 1 個十六進位數字,3 位元 = 1 個八進位數字,以便快速轉換
- 檢查有效數字:基數 n 只使用 0 到 n-1 的數字(基數 8 不能有 '8' 或 '9')
- 對於大數:轉換為中間基數(二進位↔十六進位比八進位↔十進位更容易)
常見錯誤避免
- 在程式語言中混淆 0b (二進位)、0o (八進位)、0x (十六進位) 前綴
- 在二進位轉十六進位時忘記前導零:1010₂ = 0A₁₆ 而非 A₁₆ (需要偶數個半位元組)
- 使用無效數字:八進位中的 8、十六進位中的 G - 會導致解析錯誤
- 混合使用基數而未加註記:'10' 是二進位、十進位還是十六進位?務必指明!
- 假設八進位↔十六進位可直接轉換:必須通過二進位(不同的位元分組)
- 羅馬數字算術:V + V ≠ VV (羅馬數字不是位置性的)
常見問題
為什麼計算機科學使用二進位而非十進位?
二進位完美對應電子電路:開/關、高/低電壓。雙態系統可靠、快速且易於製造。十進位需要 10 個不同的電壓等級,會使電路變得複雜且容易出錯。
如何快速將十六進位轉換為二進位?
記住 16 個十六進位到二進位的對應(0=0000...F=1111)。獨立轉換每個十六進位數字:A5₁₆ = 1010|0101₂。從右邊將二進位以 4 個為一組反向轉換:110101₂ = 35₁₆。不需要十進位!
學習數字基數的實際用途是什麼?
對於程式設計(記憶體位址、位元運算)、網路(IP 位址、MAC 位址)、除錯(記憶體傾印)、數位電子學(邏輯設計)和安全(密碼學、雜湊)至關重要。
為什麼現在八進位比十六進位少見?
十六進位與位元組邊界對齊(8 位元 = 2 個十六進位數字),而八進位則不對齊(8 位元 = 2.67 個八進位數字)。現代電腦是以位元組為導向的,這使得十六進位更方便。只有 Unix 檔案權限讓八進位保持了相關性。
我可以直接在八進位和十六進位之間轉換嗎?
沒有簡單的直接方法。八進位以 3 個位元分組,十六進位以 4 個位元分組。必須通過二進位轉換:八進位→二進位 (3 位元)→十六進位 (4 位元)。例如:52₈ = 101010₂ = 2A₁₆。或者使用十進位作為中介。
為什麼羅馬數字仍然存在?
傳統和美學。用於正式場合(超級盃、電影)、區分(大綱)、永恆性(沒有世紀歧義)和設計優雅。計算不實用,但在文化上持續存在。
如果我在一個基數中使用無效數字會怎樣?
每個基數都有嚴格的規則。基數 8 不能包含 8 或 9。如果你寫 189₈,它是無效的。轉換器會拒絕它。程式語言會強制執行此規則:'09' 在八進位上下文中會導致錯誤。
有基數 1 嗎?
基數 1(一進位)使用一個符號(計數符號)。不是真正的位置性:5 = '11111'(五個標記)。用於原始計數但不實用。笑話:一進位是最簡單的基數 - 只要一直數下去就好!