十六進位制

十六進位制（Hexadecimal，簡寫為 Hex 或下標 16）在數學中是一種逢 16 進 1 的進位制。一般用數字 0 到 9 和字母 A 到 F 表示，其中：A~F 相當於十進位的 10~15，這些稱作十六進位制數字。

例如十進位制數 57，在二進位制寫作 111001，在 16 進位制寫作 39。

現在的 16 進位制則普遍應用在計算機領域，這是因為將 4 個位元（Bit）化成單獨的 16 進位制數字不太困難。1 個位元組 (Byte) 可以表示成 2 個連續的 16 進位制數字。可是，這種混合表示法容易令人混淆，因此需要一些字首、字尾或下標來顯示。

表示方式

不同電腦系統、程式語言對於 16 進位數值有不同的表示方式：

Ada 與 VHDL 用所基於的 “數字引證” 把 16 進位制數包起來，例如 “16#5A3#”。（注：Ada 對整數和實數都可以使用從 1 到 16 中任何一個做為其基數。）而對於位元組向量，VHDL 使用字首 x 表示，例如，x"10"，對應的二進位制碼為："00010000"。
C 語言、C++、Shell、Python、Java 語言及其他相近的語言使用字首「0x」，例如「0x5A3」。開頭的「0」令解析器更易辨認數，而「x」則代表十六進位制（就如「O」代表八進位制）。在「0x」中的「x」可以大寫或小寫。對於字元量 C 語言中則以 x + 兩位十六進位制數的方式表示，如 xFF。
C++11 引進了十六進位制浮點型字面常量。例如：0x1.2p10 表示 （1+2/16）×210=115210。實際上，Visual C++ 一直以來使用的 C/C++ 語言標準庫函式 printf，% a 作為型別說明符來格式化輸出浮點型值即為上述格式。例如：printf ("% a",1152.0);
C/C++ 在表示字元型字面常量時，可以用：
十六進位制轉義序列：如 \x1abf4 ，可以使用任意多的十六進位制數字，直至不是十六進位制數字為止；
16 位的通用字元名（universe-character name）：\u 後面必須跟 4 個十六進位制數字（不足四位前面用零補齊），表示 Unicode 中在 0 至 0xFFFF 之內的碼位（但不能表示 0xD800 到 0xDFFF 之內的碼點，Unicode 標準規定這個範圍內的碼位保留，不表示字元）；
32 位的通用字元名：\U 後面必須跟 8 個十六進位制數字（不足八位前面用零補齊），表示 Unicode 中所有可能的碼位（除 0xD800 到 0xDFFF 之外）。
在 VB、MSX BASIC、Quick BASIC 和 FreeBASIC 中，使用字首「&H」來表示。
在 HTML，十六進位制字元可以用「x」，例如 &#x5a3; 和 &#1443; 效果應該無異。
Intel 的組合語言中用字尾「h」來標識 16 進位的數（若該數以字母起首，在前面會增加一個「0」）例如「0A3Ch」、「5A3h」
其他組譯器（AT&T、Motorola、6502），Pascal，Delphi 和某些 BASIC 的版本使用字首「$」，例如「$5A3」
亦有用 X'5A3' 這類表示方式的，如於 PL/I，COBOL 及 JCL 中。這亦是 IBM 裝載早期作業系統的大型機與小型機上最常用的資料格式。

由於表示方式沒有單一、已協定的標準，所以以上的表示方式都有被使用，有時甚至在同一份論文上會出現幾個不同的表示方式。但因為各方式之間沒有太大的分歧，所以即使混合使用也沒有構成問題。

其中最常用（或常見）表示十六進位制數值的方式是將 '0x' 加在數字前，或在數字後加上小字 16。例如 0x2BAD 和 2BAD16 都是表示十進位制的 11181（或 1118110）。

在網頁設計上十六進位是很常用的。HTML 和 CSS 使用十六進位的表示法來表示網頁上的特定顏色。使用 # 的符號來表示而非用個別的符號表示十六進位。24-bit 顏色可以用 #RRGGBB 的格式來表示，RR 是顏色中紅色成分的數值，GG 是顏色中綠色成分的數值，BB 顏色中藍色成分的數值。舉個例子，紅色的陰影是十進位 238,9,63 可以編成 #EE093F。參見網頁顏色.

在 URL 的特殊字元亦是用 ASCII 中的十六進位，每位元組都有百份比符號（%）在前，例如：空格就表示為 %20，而中文維基百科的首頁地址就是 https://zh.wikipedia.org/wiki/Wikipedia:% E9% A6%96% E9% A1% B5 。在一些現代的瀏覽器，如 Firefox 中，地址中十六進位制編碼會被解碼成實際字元，所以在這些瀏覽器中中文維基百科的首頁地址顯示成 https://zh.wikipedia.org/wiki/Wikipedia: 首頁 。

1.1 表示方法表

此中 hex 帶入具體 16 進位制數。

十六進位的分數

與其他進位系統一樣，十六進位的系統可以用來表達分數，而迴圈小數也是很常見的：

由於基數 16 是平方（42），所以與 10 進位制相比 16 進位制小數的餘數迴圈週期更加常見。十進位制時當最簡分母包含不存在於基數的素因數時就會出現迴圈小數。而 16 進位制時所有分母不是 2 的冪情況下都會表現為迴圈小數。

然而由於儲存上的方便，浮點小數在電腦上一般都會採用二進位。

十六進位制的轉換

3.1 數學的計算方法

3.1.1 十進位轉十六進位

採餘式定理分解，例如將 487710 轉成十六進位：

4877÷16=304...13 (D)

304÷16=19...0

19÷16=1...3

1÷16=0...1

這樣就計到 487710=130D16

3.2 程式設計中的函式

3.2.1 Visual Basic

十六進位制轉換為十進位制：十進位制（Long 型）=CLng ("&H" & 十六進位制數（String 型）)
十進位制轉換為十六進位制：十六進位制數（String 型）=Hex$(十進位制)

3.2.2 Javascript

Javascript 能以 toString 函式來將十進位數字轉為其他任意進位格式（String 型別）

var num = 255;

num.toString (16); // 將之轉為十六進位制

亦可用 parseInt 函式將任意進位的字串轉為十進位數字

var hexNum = "FF";

parseInt (hexNum, 16); // 將十六進位制轉為 10 進位制

3.2.3 Python

呼叫 Python 內建 int 函式把該字串轉為數字。以下為在 Python 直譯器程式設計環境下的操作示範：

把十六進位制的字串轉為十進位制數字：

print (int ('ff', 16)) # 255

把十進位制數字轉換為以十六進位制表示之字串，可呼叫內建的 hex 函式：

print (hex (255)) # 0xff

呼叫 BinAscii 模組其中的 b2a_hex 函式，可把以 ASCII 編碼的文字以十六進位制表示：

print (binascii.b2a_hex ('A')) # 41

反之也可把以十六進位制表示的文字，換成以 ASCII 編碼的文字：

print (binascii.a2b_hex ('41')) # A

3.2.4 Perl

十進位轉十六進位：

!/usr/local/bin/perl
filename: 10to16

for ($i = 0; $i

十六進位轉十進位：

!/usr/local/bin/perl
filename: 16to10

for ($i = 0; $i

用例（類 UNIX 系統中）：

先進入以上檔案所在的資料夾，然後執行命令：

> ./10to16 100 512 789

100	= 0x64

512	= 0x200

789	= 0x315

> ./16to10 AB 5D9

0xAB	= 171

0x5D9	= 1497