十六進制

十六進制

計算機術語
十六進制(英文名稱:Hexadecimal),是計算機中數據的一種表示方法。同日常生活中的表示法不一樣。它由0-9,A-F組成,字母不區分大小寫。與10進制的對應關系是:0-9對應0-9;A-F對應10-15;N進制的數可以用0~(N-1)的數表示,超過9的用字母A-F。
    中文名:十六進制 外文名: 所屬學科: 英文名:Hexadecimal 定義:計算機中數據的一種表示方法 組成:0-9,A-F

表示方法

十六進制照樣采用位置計數法,位權是16為底的幂。

舉例說明

16進制的20表示成10進制就是:2×16¹+0×16º=32。

10進制的32表示成16進制就是:20。

十進制數可以轉換成十六進制數的方法是:十進制數的整數部分“除以16取餘”,十進制數的小數部分“乘16取整”,進行轉換。

比如說十進制的0.1轉換成八進制為0.0631463146314631。就是0.1乘以8=0.8,不足1不取整,0.8乘以8=6.4,取整數6,0.4乘以8=3.2,取整數3,依次下算。

編程中,常用的還是10進制.畢竟C/C++是高級語言。

不過,由于數據在計算機中的表示,最終以二進制的形式存在,所以有時候使用二進制,可以更直觀地解決問題。但二進制數太長了。比如int類型占用4個字節,32位。比如100,用int類型的二進制數表達将是:

面對這麼長的數進行思考或操作,沒有人會喜歡。因此,C,C++沒有提供在代碼直接寫二進制數的方法。用16進制或8進制可以解決這個問題。

因為,進制越大,數的表達長度也就越短。不過,為什麼偏偏是16或8進制,而不其它的,諸如9或20進制呢?2、8、16,分别是2的1次方、3次方、4次方。這一點使得三種進制之間可以非常直接地互相轉換。8進制或16進制縮短了二進制數,但保持了二進制數的表達特點。在下面的關于進制轉換的課程中,你可以發現這一點。

二進制數第0位的權值是2的0次方,第1位的權值是2的1次方。

八進制就是逢8進1。

八進制數采用0~7這八數來表達一個數。

八進制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方。

所以,設有一個八進制數:1507,轉換為十進制為:839,具體方法如下:

可以用橫式直接計算:7×8+0×8+5×8+1×8=839

16進制就是逢16進1,但隻有0~9這十個數字,所以用A,B,C,D,E,F這六個字母來分别表示10,11,12,13,14,15。字母不區分大小寫。

十六進制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方。

所以,在第N(N從0開始)位上,如果是數β(β大于等于0,并且β小于等于15,即:F)表示的大小為β×16的N次方。

此處可以看出,所有進制換算成10進制,關鍵在于各自的權值不同。

首先來看一個二進制數:1111,它是多少呢?

你可能還要這樣計算:1×2+1×2+1×2+1×2=1×1+1×2+1×4+1×8=15。

然而,由于1111才4位,所以必須直接記住它每一位的權值,并且是從高位往低位記,:8、4、2、1。即,最高位的權值為2=8,然後依次是2=4,2=2,2=1。

記住8421,對于任意一個4位的二進制數,都可以很快算出它對應的10進制值。

二進制數要轉換為十六進制,就是以4位一段,分别轉換為十六進制。

反過來,當看到FD時,如何迅速将它轉換為二進制數呢?

先轉換F,看到F,需知道它是15(可能你還不熟悉A~F這五個數),然後15如何用8421湊呢?應該是8+4+2+1,所以四位全為1:1111。

接着轉換D,看到D,知道它是13,13如何用8421湊呢?應該是:8+4+1,即:1101。

由于十六進制轉換成二進制相當直接,所以,需要将一個十進制數轉換成2進制數時,也可以先轉換成16進制,然後再轉換成2進制。

同樣,如果一個二進制數很長,需要将它轉換成10進制數時,除了前面學過的方法是,還可以先将這個二進制轉換成16進制,然後再轉換為10進制。

如果不使用特殊的書寫形式,16進制數也會和10進制相混。随便一個數:9876,就看不出它是16進制或10進制。

C,C++規定,16進制數必須以0x開頭。比如0x1表示一個16進制數。而1則表示一個十進制。另外如:0xff,0xFF,0X102A,等等。其中的x也不區分大小寫。(注意:0x中的0是數字0,而不是字母O)

以下是一些用法示例:

inta=0x100F;

intb=0x70+a;

至此,學完了所有進制:10進制,8進制,16進制數的表達方式。最後一點很重要,C/C++中,10進制數有正負之分,比如12表示正12,而-12表示負12,;但8進制和16進制隻能表達無符号的正整數,如果你在代碼中寫:-078,或寫:-0xF2,C,C++并不把它當成一個負數。

轉義符也可以接一個16進制數來表示一個字符。如'?'字符,可以有以下表達方式:

'?'//直接輸入字符

'77'//用八進制,此時可以省略開頭的0

'0x3F'//用十六進制

同樣,這一小節隻用于了解。除了空字符用八進制數'0'表示以外,很少用後兩種方法表示一個字符。

各碼轉換

結束了各種進制的轉換,來談談另一個話題:原碼、反碼、補碼

已經知道計算機中,所有數據最終都是使用二進制數表達。

也已經學會如何将一個10進制數如何轉換為二進制數。

不過,仍然沒有學習一個負數如何用二進制表達。

在計算機中,負數以其正值的補碼形式表達。

什麼叫補碼呢?這得從原碼,反碼說起。

原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。

反碼:将二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。

取反操作指:原為1,得0;原為0,得1。(1變0;0變1)

補碼:反碼加1稱為補碼。

也就是說,要得到一個數的補碼,先得到反碼,然後将反碼加上1,所得數稱為補碼。

可見,-1在計算機裡用二進制表達就是全1。16進制為:0xFFFFFFFF。

一切都是紙上說的……說-1在計算機裡表達為0xFFFFFFFF,能不能親眼看一看呢?當然可以。利用C++Builder的調試功能,可以看到每個變量的16進制值。

變量

下面來動手完成一個小小的實驗,通過調試,觀察變量的值。

在代碼中聲明兩個int變量,并分别初始化為5和-5。然後通過CB提供的調試手段,可以查看到程序運行時,這兩個變量的十進制值和十六進制值。

首先寫一個如下的C語言控制台程序:

設置斷點:最常用的調試方法之一,使程序在運行時,暫停在某一代碼位置,在Code::Blocks中,設置斷點的方法是在某一行代碼上按F5或在行首欄内單擊鼠标。

在return0;這一行上設置斷點。斷點所在行将被Code::Blocks以紅色顯示。接着,運行程序(F9),程序将在斷點處停下來。當程序停在斷點的時,可以觀察當前代碼片段内,可見的變量。觀察變量的方法很多種,這裡學習使用DebugInspector(調試期檢視),來全面觀察一個變量。

以下是調出觀察某一變量的DebugInspector窗口的方法:先确保代碼窗口是活動窗口。(用鼠标點一下代碼窗口)

按下Ctrl鍵,然後将鼠标挪到變量aaaa上面,你會發現代碼中的aaaa變藍,并且出現下劃線,效果如網頁中的超鍊接,而鼠标也變成了小手狀:點擊鼠标,将出現變量aaaa的檢視窗口。

aaaa:變量名。

int:變量的數據類型。

0012FF88:變量的内存地址,請參看5.2變量與内存地址;地址總是使用十六進制表達。

0x00000005:同樣是變量的值,但采用16進制表示。因為是int類型,所以占用4字節。

首先先關閉前面的用于觀察變量aaaa的DebugInspector窗口。

然後,用同樣的方法來觀察變量bbbb,它的值為-5,負數在計算機中使用補碼表示。

正如所想,-5的補碼為:0xFFFFFFFB。

再按一次F9,程序将從斷點繼續運行,然後結束。

總結

1、學會了如何将二、八、十六進制數轉換為十進制數。

三種轉換方法是一樣的,都是使用乘法。

2、學會了如何将十進制數轉換為二、八、十六進制數。

方法也都一樣,采用除法。

3、學會了如何快速的地互換二進制數和十六進制數。

要訣就在于對二進制數按四位一組地轉換成十六進制數。

在學習十六進制數後,會在很多地方采用十六進制數來替代二進制數。

4、學習了原碼、反碼、補碼。

把原碼的0變1,1變0,就得到反碼。要得到補碼,則先得反碼,然後加1。

以前隻知道正整數在計算機裡是如何表達,這時還知道負數在計算機裡使用其絕對值的補碼表達。

比如,-5在計算機中如何表達?回答是:5的補碼。

5、最後在上機實驗中,這會了如何設置斷點,如何調出DebugInspector窗口觀察變量。

标準表示

在數制使用時,常将各種數制用簡碼來表示:如十進制數用D表示或省略;二進制用B來表示;十六進制數用H來表示。

如:十制數123表示為:123D或者123;二進制數1011表示為:1011B;十六進制數3A4表示為:3A4H。

另外在編程中十六進制數也用“0x”作為開頭。

意義

用于計算機領域的一種重要的數制。

對計算機理論的描述,計算機硬件電路的設計都是很有益的。比如邏輯電路設計中,既要考慮功能的完備,還要考慮用盡可能少的硬件,十六進制就能起到一些理論分析的作用。比如四位二進制電路,最多就是十六種狀态,也就是一種十六進制形式,隻有這十六種狀态都被用上了或者盡可能多的被用上,硬件資源才發揮了盡可能大的作用。

十六進制更簡短,因為換算的時候一位16進制數可以頂4位2進制數。衆所周知,将一個整型的十進制負數轉換成八進制或十六進制,首先要将其轉換成二進制,然後将二進制轉換為八進制或十六進制。

相關詞條

相關搜索

其它詞條