資料表示法與數字系統
八進位(octal)
/ OCK-tul /
八進位是另一種對人類友善的二進位簡寫,是十六進位的兄長。它是基底八,只用數字 0 到 7。和十六進位一樣,它的魅力在於八是二的次方——八是 2^3——所以每一個八進位數字正好裝 3 個位元。在十六進位成為主流之前,八進位是字組大小為三位元倍數的機器上書寫二進位的流行方式。
要把二進位轉成八進位,從右邊把位元三個一組分好,把每組讀成一個八進位數字:0b101 是 5,0b110 是 6,所以 0b101110 是八進位的 56。八進位數常以開頭的零或前綴 0o 標記,例如 0o56。算術仍是一貫的位值概念:0o56 代表 5 乘 8 加 6 = 46(十進位)。
如今八進位多半是小眾記法,但它仍稱王的一處是 Unix 檔案權限:像 0o755 這樣的模式把三組各三個權限位元(讀、寫、執行)分別給擁有者、群組與其他人打包,這正是三位元的八進位數字之所以如此貼合的原因。一個歷史註腳兼真實陷阱:在許多程式語言裡,以零開頭寫的數,例如 0755,會被悄悄解讀成八進位,所以 011 是數值九而非十一——這個 bug 讓很多程式設計師吃過驚。
二進位 0b110101 分組為 110 101,是八進位的 0o65,等於 6 乘 8 加 5 = 53(十進位)。Unix 權限 0o644 表示擁有者讀+寫、群組讀、其他人讀。
每個八進位數字恰好對應三個位元;檔案權限是八進位至今的歸宿。
在 C、Java 等語言中,開頭的零代表八進位:010 是數值 8,不是 10。這條悄悄生效的規則惡名昭彰,是許多離奇 bug 的來源,這也是為什麼較新的語言偏好明確的 0o 前綴。
又称
另见