跳到主要內容跳到頁尾

進位轉換函式全整理:BIN2DEC、DEC2HEX、HEX2DEC、BASE 與 DECIMAL

6 分鐘閱讀Lv.3 中級摘要與日期

二進位、八進位、十進位、十六進位互相轉換的 12 個函式,加上任意進位的 BASE 與 DECIMAL。附語法、位數與負數的限制,最後用十六進位色碼轉 RGB 當實例。

發布 更新

文章目錄

今天要整理一整組進位轉換的函式,像是 DEC2HEX、HEX2DEC、BIN2DEC 這些名字長得很像的傢伙,還有可以轉成任意進位的 BASE 跟 DECIMAL。

坦白說,我在工作上用到進位轉換的機會很少,一年大概一兩次。比較常見的情況是網頁色碼像 #F4A261 這種十六進位的要拆成 RGB 三個數字,或是看到設備代碼、權限位元像 755 這種,想知道它對應的二進位長怎樣,又或是程式除錯時對一下數值。這篇當作工具書,需要的時候回來查就好。

怎麼選

函式名稱很好記:來源2目標。DEC 是十進位、BIN 是二進位、OCT 是八進位、HEX 是十六進位。想從哪個轉到哪個,把兩邊的縮寫接起來就是函式名。

從\到DECBINOCTHEX
DECDEC2BINDEC2OCTDEC2HEX
BINBIN2DECBIN2OCTBIN2HEX
OCTOCT2DECOCT2BINOCT2HEX
HEXHEX2DECHEX2BINHEX2OCT

如果要轉成 2 到 36 之間的其他進位,就用 BASE 把十進位轉過去,DECIMAL 再轉回十進位。

有兩件事先記著,後面每個函式都適用:

  • 轉成二進位、八進位、十六進位的結果是文字,不是數字。就算結果看起來全是 0 到 9,例如 BIN2OCT("1111") 的 17,拿去加 20 會得到 37,因為 Sheets 把它當成十進位的 17 來算,但它其實是八進位的 17,也就是十進位的 15。要算數字,先用 XXX2DEC 或 DECIMAL 轉回十進位,這兩種的結果才是真正的數字。
  • 輸入的二進位、八進位、十六進位最多 10 位,用二補數表示負數。所以 1111111111 這個二進位在這裡代表 -1,不是 1023。

二進位

BIN2DEC

把二進位轉成十進位。

語法:

  • 二進位數字:只能有 0 跟 1,最多 10 位,建議用雙引號包起來當文字。

舉例:

Google 試算表公式
fx

二進位 1101 轉十進位

=BIN2DEC("1101")

先手算:8 + 4 + 0 + 1 = 13,你應該會得到 13!

要注意,10 位的二進位最左邊那一位是正負號。 會得到 -1,因為負數是用二補數存的。

BIN2HEX

把二進位轉成十六進位。

語法:

  • 二進位數字:最多 10 位。
  • 位數:選填,結果不足這個位數時,前面補 0。負數會忽略這個參數。
Google 試算表公式
fx

二進位 11111 轉十六進位,補到 8 位

=BIN2HEX("11111", 8)

結果是 0000001F。如果結果需要的位數比你指定的還多,會出現 #NUM!。

BIN2OCT

把二進位轉成八進位。

語法:

Google 試算表公式
fx

二進位 1111 轉八進位

=BIN2OCT("1111")

結果是 17。三位二進位剛好對應一位八進位,1111 拆成 001 跟 111,就是 1 跟 7。

八進位

OCT2BIN

把八進位轉成二進位。

語法:

Google 試算表公式
fx

八進位 17 轉二進位

=OCT2BIN("17")

結果是 1111。

OCT2DEC

把八進位轉成十進位。

語法:

我自己唯一想得到的用途,是 Linux 的檔案權限 755:

Google 試算表公式
fx

八進位 755 轉十進位

=OCT2DEC("755")

先手算:7 × 64 + 5 × 8 + 5 = 493,函式也會給你 493。

OCT2HEX

把八進位轉成十六進位。

語法:

Google 試算表公式
fx

八進位 377 轉十六進位

=OCT2HEX("377")

結果是 FF。

十進位

DEC2BIN

把十進位轉成二進位。

語法:

  • 十進位數字:範圍是 -512 到 511,因為結果最多 10 位。
  • 位數:選填,不足時前面補 0。
Google 試算表公式
fx

37 轉二進位,補到 8 位

=DEC2BIN(37, 8)

結果是 00100101。不指定位數的話, 就是 100101。

負數的話, 會得到 1111111111。

DEC2OCT

把十進位轉成八進位。

語法:

Google 試算表公式
fx

493 轉八進位

=DEC2OCT(493)

結果是 755,剛好是上面 OCT2DEC 的反向。

DEC2HEX

把十進位轉成十六進位,這組裡面我最常碰到的一個。

語法:

  • 十進位數字:正數最大到 549755813887,負數最小到 -549755813888。
  • 位數:選填,結果不足時前面補 0,負數會忽略。
Google 試算表公式
fx

244 轉十六進位,補到 2 位

=DEC2HEX(244, 2)

結果是 F4。像 這樣補位數很實用,會得到 0A,色碼每個顏色都需要固定兩位。

十六進位

HEX2DEC

把十六進位轉成十進位,色碼轉 RGB 就靠它。

語法:

  • 十六進位數字:0 到 9、A 到 F,大小寫都可以,最多 10 位。出現其他字元會得到 #NUM!。
Google 試算表公式
fx

十六進位 F4 轉十進位

=HEX2DEC("F4")

先手算:15 × 16 + 4 = 244,你應該會得到 244!

HEX2BIN

把十六進位轉成二進位。

語法:

Google 試算表公式
fx

十六進位 F 轉二進位,補到 8 位

=HEX2BIN("F", 8)

結果是 00001111。

HEX2OCT

把十六進位轉成八進位。

語法:

Google 試算表公式
fx

十六進位 FF 轉八進位

=HEX2OCT("FF")

結果是 377。

任意進位:BASE 與 DECIMAL

上面那 12 個只涵蓋 2、8、10、16 這四種。要轉成其他進位,用這一對。

BASE

把十進位數字轉成指定進位的文字。

語法:

  • 數值:0 或正整數,小數會被截掉。
  • 進位:2 到 36 的整數。
  • 最小長度:選填,結果不足時前面補 0。
Google 試算表公式
fx

5 轉二進位,至少 8 位

=BASE(5, 2, 8)

結果是 00000101。另外, 會得到 F4,跟 DEC2HEX 一樣。我個人覺得 BASE 比較好用的地方是不用背那 12 個名字,也沒有 10 位的限制,不過官方說明要求數值是 0 或正整數,負數別丟給它。

Excel 也有這 14 個同名函式,用法與 10 位的限制相同;BASE 和 DECIMAL 要 Excel 2013 以上才有。

DECIMAL

把指定進位的文字轉回十進位。

語法:

  • 數值:要轉換的文字,要用雙引號包起來。
  • 進位:2 到 36 的整數。
Google 試算表公式
fx

36 進位的 zz 轉十進位

=DECIMAL("zz", 36)

先手算:35 × 36 + 35 = 1295。36 進位用 0 到 9 加 A 到 Z,所以 z 代表 35。

實例:色碼轉 RGB

最後來做一個實際的題目。A2 放著色碼 #F4A261,我想拆成紅、綠、藍三個 0 到 255 的數字。

色碼 # 後面是三組兩位的十六進位,所以先用 MID 把每組切出來,再用 HEX2DEC 轉成十進位。紅色在第 2 個字元開始:

Google 試算表公式
fx

取出紅色數值

=HEX2DEC(MID(A2, 2, 2))

綠色從第 4 個字元、藍色從第 6 個字元開始:

Google 試算表公式
fx

取出綠色數值

=HEX2DEC(MID(A2, 4, 2))
Google 試算表公式
fx

取出藍色數值

=HEX2DEC(MID(A2, 6, 2))

來看看結果:

色碼紅綠藍
#F4A26124416297

反過來,要把這三個數字組回色碼,就是 DEC2HEX 補到兩位再用 & 接起來:

Google 試算表公式
fx

RGB 組回色碼

="#" & DEC2HEX(244, 2) & DEC2HEX(162, 2) & DEC2HEX(97, 2)

會得到 #F4A261。

需要的時候回來查一下,就這樣!

分享:
#進位轉換#十六進位#二進位#色碼
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。