十六進位

維基百科,自由的百科全書
前往: 導覽搜尋

十六進位(簡寫為hex或下標16)在數學中是一種逢16進1的進位制。一般用數字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,這些稱作十六進位數字

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

在歷史上,中國曾經在重量單位上使用過16進位,比如,規定16為一

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

0hex = 0dec = 0oct 0 0 0 0
1hex = 1dec = 1oct 0 0 0 1
2hex = 2dec = 2oct 0 0 1 0
3hex = 3dec = 3oct 0 0 1 1
4hex = 4dec = 4oct 0 1 0 0
5hex = 5dec = 5oct 0 1 0 1
6hex = 6dec = 6oct 0 1 1 0
7hex = 7dec = 7oct 0 1 1 1
8hex = 8dec = 10oct 1 0 0 0
9hex = 9dec = 11oct 1 0 0 1
Ahex = 10dec = 12oct 1 0 1 0
Bhex = 11dec = 13oct 1 0 1 1
Chex = 12dec = 14oct 1 1 0 0
Dhex = 13dec = 15oct 1 1 0 1
Ehex = 14dec = 16oct 1 1 1 0
Fhex = 15dec = 17oct 1 1 1 1

表示方式[編輯]

不同電腦系統編程語言對於16進制數值有不同的表示方式:

  • AdaVHDL用所基於的「數字引證」把16進位數包起來,例如「16#5A3#」。(註:Ada對整數和實數都可以使用從1到16中任何一個做為其基數。)而對於字節向量,VHDL使用字首 x 表示,例如,x"10",對應的二進位碼為:"00010000"。
  • C語言、C++、ShellPythonJava語言及其他相近的語言使用字首「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」,例如֣和֣效果應該無異。
  • Intel的彙編語言中用字尾「h」來標識16進位的數(若該數以字母起首,在前面會增加一個「0」)例如「0A3Ch」、「5A3h」
  • 其他匯編器(AT&TMotorola、6502),PascalDelphi和某些BASIC的版本使用字首「$」,例如「$5A3」
  • 亦有用X'5A3'這類表示方式的,如於PL/ICOBOLJCL中。這亦是IBM裝載早期作業系統的大型機小型機上最常用的數據格式。
記數系統
印度-阿拉伯數字系統
西方阿拉伯數字
阿拉伯文數字
高棉數字
印度數字
波羅米數字
泰語數字
漢字文化圈記數系統
中文數字
閩南語數字
越南語數字
算籌
日語數字
朝鮮文數字
蘇州碼子
字母記數系統
阿拉伯字母數字
亞美尼亞數字
西里爾數字
吉茲數字
希伯來數字
希臘數字
阿利耶波多數字
其它記數系統
雅典數字
巴比倫數字
古埃及數字
伊特拉斯坎數字
瑪雅數字
羅馬數字
底數區分的進位制系統
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 20 60 64

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

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

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

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

表示方法表[編輯]

此中hex帶入具體16進位數.

環境 格式 備註
URL  %hex
XML,XHTML &#xhex
HTML,CSS #hex 6位,用於表示顏色
Unicode U+hex 6位,表示字符編碼
MIME =hex
Modula-2 #hex
Smalltalk,ALGOL 68 16rhex
Common Lisp #xhex或#16rhex
IPv6 8個hex用:分隔

十六進制的分數[編輯]

與其他進位系統一樣,十六進制的系統可以用來表達分數,而循環小數也是很常見的:

1÷ 0x 1
=
0x 1 1÷ 0x 5
=
0x 0.3 1÷ 0x 9
=
0x 0.1C7 1÷ 0x D
=
0x 0.13B
1÷ 0x 2
=
0x 0.8 1÷ 0x 6
=
0x 0.2A 1÷ 0x A
=
0x 0.19 1÷ 0x E
=
0x 0.1249
1÷ 0x 3
=
0x 0.5 1÷ 0x 7
=
0x 0.249 1÷ 0x B
=
0x 0.1745D 1÷ 0x F
=
0x 0.1
1÷ 0x 4
=
0x 0.4 1÷ 0x 8
=
0x 0.2 1÷ 0x C
=
0x 0.15 1÷ 0x10
=
0x 0.1

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

然而由於貯存上的方便,浮點小數在電腦上一般都會採用二進制

十六進位的轉換[編輯]

數學的計算方法[編輯]

十六進位的乘法表

十進制轉十六進制[編輯]

餘數定理分解,例如將487710轉成十六進制:

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

304÷16=19....0

19÷16=1....3

1÷16=0....1

這樣就計到487710=130D16

編程中的函式[編輯]

Visual Basic[編輯]

  • 十六進位轉換為十進位:十進位(Long型)=CLng("&H" & 十六進位數(String型))
  • 十進位轉換為十六進位:十六進位數(String型)=Hex$(十進位)

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

Perl[編輯]

十進制轉十六進制:

 #!/usr/local/bin/perl
 # filename: 10to16
 for ($i = 0; $i < @ARGV; $i++)
 {
 	printf("%d\t= 0x%x\n", $ARGV[$i], $ARGV[$i]);
 }

十六進制轉十進制:

 #!/usr/local/bin/perl
 # filename: 16to10
 for ($i = 0; $i < @ARGV; $i++)
 {
 	$val = hex($ARGV[$i]);
 	printf("0x%x\t= %d\n", $val, $val);
 }

用例(類UNIX系統中): 先進入以上文件所在的文件夾,然後執行命令:

> ./10to16 100 512 789
100     = 0x64
512     = 0x200
789     = 0x315
> ./16to10 AB 5D9
0xAB    = 171
0x5D9   = 1497

外部連結[編輯]