十六進制表示法(進制轉換)

本篇文章記錄十六進制表示法,以及與十進制、二進制之間的轉換方法。十進制的數字表示我們日常生活中一直在使用,在計算機中使用二進制表示法。計算機系統中一個使用字節作爲基本的讀寫單位,一個字節由8位組成。

​ 在二進制表示法中,他的值域爲 00000000~11111111 。在十進制中值域則爲 0~255。 這兩種符號表示法對於描述位模式來說都不是非常方便。 二進制表示法太冗長,而十進制表示法與位模式的互相轉化很麻煩。 替代的方法是,以16爲基數,也稱十六進制數 ,來表示位模式。十六進制(簡寫爲“hex”)使用數字 ‘0’ ~ ‘9’ 以及字符 ‘A’ ~ ‘F’ 來表示 16 個可能的值。下圖展示了 16 個 十六進制數字對應的 十進制值 和 二進制值。用十六進制書寫,一個字節的值域爲 00 ~ FF


十六進制數字 0 1 2 3 4 5 6 7 8 9 A B C D E F
十進制值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
二進制值 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

在C 語言中,以 0x 或 0X 開頭的數字常量被認爲是十六進制。

編寫機器級程序的一個常見任務就是在位模式 的十進制、二進制、十六進制 表示之間人工轉換。 二進制和十六進制之間的轉換比較簡單直接,因爲可以一次執行一個十六進制數字的轉換。數字的轉換可以參考上面的表格。

下面主要介紹進制之間的轉換方法

二進制與十六進制之間的轉換

比如,假設給你一個數字 0x173A4C。可以通過展示每個十六進制數字,將它轉換爲二進制格式,如下所示:

十六進制 1 7 3 A 4 C
二進制 0001 0111 0011 1010 0100 1100

這樣就得了二進制表示 000101110011101001001100。

反過來如果給定一個二進制數字 1111001010110110110011,可以通過首先把它分爲每 4 位一組來轉換爲十六進制。不過要注意,如果位總數不是 4 的倍數,最左邊的一組可以少於四位,前面用 0 補足。 然後將每個 4 位 組 轉換爲相應的十六進制數字:

二進制 11 1100 1010 1101 1011 0011
十六進制 3 C A D B 3

十進制與十六進制之間的轉換

  1. 當值 x 是 2 的 非負整數 n 次冪時,也就是 x = 2^n , 這種情況我們很容易將 x 寫成 十六進制 形式,只要記住 x 的二進制 表示 就是 1 後面跟 n 個 0 。十六進制 數字0 表示 4 個二進制 0. 所以,當n表示成 i + 4j 的形式, 其中 0 <= i <= 3 , 我們可以把 x 寫成開頭 的十六進制數字爲 1(i=0)、2(i=1)、4(i=2)或者 8(i=3),後面跟隨者 j 個十六機制的 0 。比如 x=2048=2^11, 我們有 n = 11 = 3 + 4*2, 從而得到十六進制表示 0x800。

  2. 十進制和十六進制表示 之間的轉換需要使用乘法或者除法來處理一般情況。 將一個十進制數 x 轉換爲 十六進制,可以反覆地用 16 除 x,得到一個 商 q 和一個餘數 r,也就是 x = q16 + r 。 然後,我們用十六進制數字表示的 r 作爲最低位數字*,並且通過對 q 反覆進行這個過程 得到剩下的數字。 例如,考慮十進制 314156 轉換:

314156=19634*16+12 C
19634=1227*16+2 2
1227=76*16+11 B
76=4*16+12 C
4=16*0+4 4

從這裏我們能讀出十六進制表示爲 0x4CB2C (最後的餘數爲最高位)。

​ 反過來將一個十六進制數字轉換爲十進制數字,我們可以用相應的16的冪乘以每個十六進制數字。比如,給定數字 0x7AF,我們計算它對應的十進制爲 7 * 16^2 + 10 * 16 + 15 = 1792 + 160 + 15 = 1967。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章