?? 第6章 二進制、八進制、十六進制.htm
字號:
1 1</P>
<P>0000 = 0 + 0 + 0 + 0 =
0 0</P>
<P> </P>
<P><B>二進制數要轉換為十六進制,就是以4位一段,分別轉換為十六進制。</B></P>
<P>如(上行為二制數,下面為對應的十六進制):</P>
<P> </P>
<P>1111 1101 , 1010 0101 , 1001 1011</P>
<P> F D , A
5 , 9 B </P>
<P> </P>
<P>反過來,當我們看到 FD時,如何迅速將它轉換為二進制數呢?</P>
<P>先轉換F:</P>
<P>看到F,我們需知道它是15(可能你還不熟悉A~F這五個數),然后15如何用8421湊呢?應該是8 + 4 + 2 + 1,所以四位全為1
:1111。</P>
<P>接著轉換 D:</P>
<P>看到D,知道它是13,13如何用8421湊呢?應該是:8 + 2 + 1,即:1011。</P>
<P>所以,FD轉換為二進制數,為: 1111 1011</P>
<P> </P>
<P>由于十六進制轉換成二進制相當直接,所以,我們需要將一個十進制數轉換成2進制數時,也可以先轉換成16進制,然后再轉換成2進制。</P>
<P>比如,十進制數 1234轉換成二制數,如果要一直除以2,直接得到2進制數,需要計算較多次數。所以我們可以先除以16,得到16進制數:</P>
<TABLE borderColor=#000000 cellSpacing=0 cellPadding=0 width="42%"
border=1>
<TBODY>
<TR>
<TD width="25%">被除數</TD>
<TD width="25%">計算過程</TD>
<TD width="25%">商</TD>
<TD width="25%">余數</TD></TR>
<TR>
<TD width="25%">1234</TD>
<TD width="25%">1234/16</TD>
<TD width="25%">77</TD>
<TD width="25%">2</TD></TR>
<TR>
<TD width="25%">77</TD>
<TD width="25%">77/16</TD>
<TD width="25%">4</TD>
<TD width="25%">13 (D)</TD></TR>
<TR>
<TD width="25%">4</TD>
<TD width="25%">4/16</TD>
<TD width="25%">0</TD>
<TD width="25%">4</TD></TR></TBODY></TABLE>
<P> </P>
<P>結果16進制為: 0x4D2</P>
<P> </P>
<P>然后我們可直接寫出0x4D2的二進制形式: 0100 1011 0010。</P>
<P>其中對映關系為:</P>
<P>0100 -- 4</P>
<P>1011 -- D</P>
<P>0010 -- 2</P>
<P> </P>
<P>同樣,如果一個二進制數很長,我們需要將它轉換成10進制數時,除了前面學過的方法是,我們還可以先將這個二進制轉換成16進制,然后再轉換為10進制。</P>
<P>下面舉例一個int類型的二進制數:</P>
<P>01101101 11100101 10101111 00011011</P>
<P>我們按四位一組轉換為16進制: 6D E5 AF 1B </P>
<P> </P>
<H3><A name=6.5>6.5</A> 原碼、反碼、補碼</H3>
<P> </P>
<P>結束了各種進制的轉換,我們來談談另一個話題:原碼、反碼、補碼。</P>
<P> </P>
<P>我們已經知道計算機中,所有數據最終都是使用二進制數表達。</P>
<P>我們也已經學會如何將一個10進制數如何轉換為二進制數。</P>
<P>不過,我們仍然沒有學習一個負數如何用二進制表達。</P>
<P> </P>
<P>比如,假設有一 int 類型的數,值為5,那么,我們知道它在計算機中表示為:</P>
<P>00000000 00000000 00000000 00000101</P>
<P>5轉換成二制是101,不過int類型的數占用4字節(32位),所以前面填了一堆0。</P>
<P>現在想知道,-5在計算機中如何表示?</P>
<P> </P>
<P><B>在計算機中,負數以其正值的補碼形式表達</B>。</P>
<P>什么叫補碼呢?這得從原碼,反碼說起。</P>
<P> </P>
<P><B>原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。</B></P>
<P>比如 00000000 00000000 00000000 00000101 是 5的 原碼。</P>
<P> </P>
<P><B>反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。</B></P>
<P>取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)</P>
<P>比如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111
11111111 11111010。</P>
<P>稱:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000
00000101 的反碼。</P>
<P>反碼是相互的,所以也可稱:</P>
<P>11111111 11111111 11111111 11111010 和 00000000 00000000 00000000
00000101 互為反碼。</P>
<P> </P>
<P><B>補碼:反碼加1稱為補碼。</B></P>
<P>也就是說,要得到一個數的補碼,先得到反碼,然后將反碼加上1,所得數稱為補碼。</P>
<P>比如:00000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111
11111010。</P>
<P>那么,補碼為:</P>
<P>11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111
11111011</P>
<P> </P>
<P>所以,-5 在計算機中表達為:11111111 11111111 11111111
11111011。轉換為十六進制:0xFFFFFFFB。</P>
<P> </P>
<P>再舉一例,我們來看整數-1在計算機中如何表示。</P>
<P>假設這也是一個int類型,那么:</P>
<P> </P>
<P>1、先取1的原碼:00000000 00000000 00000000 00000001</P>
<P>2、得反碼: 11111111 11111111 11111111 11111110</P>
<P>3、得補碼: 11111111 11111111 11111111 11111111</P>
<P> </P>
<P>可見,-1在計算機里用二進制表達就是全1。16進制為:0xFFFFFF。</P>
<P> </P>
<P>一切都是紙上說的……說-1在計算機里表達為0xFFFFFF,我能不能親眼看一看呢?當然可以。利用C++
Builder的調試功能,我們可以看到每個變量的16進制值。</P>
<P> </P>
<H3><A name=6.6>6.6</A> 通過調試查看變量的值</H3>
<P>下面我們來動手完成一個小小的實驗,通過調試,觀察變量的值。</P>
<P>我們在代碼中聲明兩個int
變量,并分別初始化為5和-5。然后我們通過CB提供的調試手段,可以查看到程序運行時,這兩個變量的十進制值和十六進制值。</P>
<P>首先新建一個控制臺工程。加入以下黑體部分(就一行):</P>
<P> </P>
<P>//---------------------------------------------------------------------------</P>
<P>#pragma hdrstop</P>
<P>//---------------------------------------------------------------------------</P>
<P>#pragma argsused</P>
<P>int main(int argc, char* argv[])</P>
<P>{</P>
<P><B>int aaaa = 5, bbbbb = -5;</B></P>
<P>return 0;</P>
<P>}</P>
<P>//---------------------------------------------------------------------------<BR></P>
<P>沒有我們熟悉的的那一行:</P>
<P>getchar();</P>
<P>所以,如果全速運行這個程序,將只是DOS窗口一閃而過。不過今天我們將通過設置<B>斷點</B>,來使用程序在我們需要的地兒停下來。</P>
<P><B>設置斷點:最常用的調試方法之一,使用程序在運行時,暫停在某一代碼位置,</B></P>
<P> </P>
<P>在CB里,設置斷點的方法是在某一行代碼上按F5或在行首欄內單擊鼠標。</P>
<P>如下圖:</P>
<P><IMG height=188 src="第6章 二進制、八進制、十六進制.files/ls06.h5.gif" width=311
border=0></P>
<P>在上圖中,我們在return 0;這一行上設置斷點。斷點所在行將被CB以紅色顯示。</P>
<P> </P>
<P>接著,運行程序(F9),程序將在斷點處停下來。</P>
<P><IMG height=131 src="第6章 二進制、八進制、十六進制.files/ls06.h4.gif" width=333
border=0></P>
<P>(請注意兩張圖的不同,前面的圖是運行之前,后面這張是運行中,左邊的箭頭表示運行運行到哪一行)</P>
<P> </P>
<P>當程序停在斷點的時,我們可以觀察當前代碼片段內,可見的變量。觀察變量的方法很多種,這里我們學習使用Debug Inspector
(調試期檢視),來全面觀察一個變量。</P>
<P>以下是調出觀察某一變量的 Debug Inspector 窗口的方法:</P>
<P> </P>
<P>先確保代碼窗口是活動窗口。(用鼠標點一下代碼窗口)</P>
<P>按下Ctrl鍵,然后將鼠標挪到變量 aaaa 上面,你會發現代碼中的aaaa變藍,并且出現下劃線,效果如網頁中的超鏈接,而鼠標也變成了小手狀:
</P>
<P><IMG height=223 src="第6章 二進制、八進制、十六進制.files/ls06.h6.gif" width=330
border=0> </P>
<P>點擊鼠標,將出現變量aaaa的檢視窗口: </P>
<P><IMG height=160 src="第6章 二進制、八進制、十六進制.files/ls06.h1.jpg" width=340
border=0> </P>
<P>(筆者使用的操作系統為WindowsXP,窗口的外觀與Win9X有所不同) </P>
<P>從該窗口,我可以看到: </P>
<P>aaaa :變量名 </P>
<P>int :變量的數據類型 </P>
<P>0012FF88:變量的內存地址,請參看<A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls05.htm#5.2">5.2
變量與內存地址</A>;地址總是使用十六進制表達 </P>
<P>5 : 這是變量的值,即aaaa = 5; </P>
<P>0x00000005 :同樣是變量的值,但采用16進制表示。因為是int類型,所以占用4字節。 </P>
<P> </P>
<P>首先先關閉前面的用于觀察變量aaaa的Debug Inspector窗口。 </P>
<P>現在,我們用同樣的方法來觀察變量bbbb,它的值為-5,負數在計算機中使用補碼表示。 </P>
<P><IMG height=118 src="第6章 二進制、八進制、十六進制.files/ls06.h2.jpg" width=264
border=0> </P>
<P>正如我們所想,-5的補碼為:0xFFFFFFFB。 </P>
<P> </P>
<P>再按一次F9,程序將從斷點繼續運行,然后結束。 </P>
<H3><A name=6.7>6.7</A> 本章小結 </H3>
<P>很難學的一章? </P>
<P>來看看我們主要學了什么: </P>
<P> </P>
<P>1)我們學會了如何將二、八、十六進制數轉換為十進制數。 </P>
<P>三種轉換方法是一樣的,都是使用乘法。 </P>
<P> </P>
<P>2)我們學會了如何將十進制數轉換為二、八、十六進制數。 </P>
<P>方法也都一樣,采用除法。 </P>
<P> </P>
<P>3)我們學會了如何快速的地互換二進制數和十六進制數。 </P>
<P>要訣就在于對二進制數按四位一組地轉換成十六進制數。 </P>
<P>在學習十六進制數后,我們會在很多地方采用十六進制數來替代二進制數。 </P>
<P> </P>
<P>4)我們學習了原碼、反碼、補碼。 </P>
<P>把原碼的0變1,1變0,就得到反碼。要得到補碼,則先得反碼,然后加1。 </P>
<P>以前我們只知道正整數在計算機里是如何表達,現在我們還知道負數在計算機里使用其絕對值的補碼表達。 </P>
<P>比如,-5在計算機中如何表達?回答是:5的補碼。 </P>
<P> </P>
<P>5)最后我們在上機實驗中,這會了如何設置斷點,如何調出Debug Inspector窗口觀察變量。 </P>
<P>以后我們會學到更多的調試方法。 </P></TD></TR></TBODY></TABLE></CENTER>
<P align=center>[<A
href="http://www.d2school.com/bcyl/bhcpp/newls/ls06.htm#頁首">到頁首</A>]</P></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -