?? 第6章 二進(jìn)制、八進(jìn)制、十六進(jìn)制.htm
字號(hào):
<P> </P>
<P>第0位: 5 * 16<SUP>0</SUP> = 5</P>
<P>第1位: F * 16<SUP>1</SUP> = 240</P>
<P>第2位: A * 16<SUP>2</SUP> = 2560</P>
<P>第3位: 2 * 16<SUP>3</SUP> = 8192 +</P>
<P>-------------------------------------</P>
<P>
10997 </P>
<P>直接計(jì)算就是:</P>
<P>5 * 16<SUP>0</SUP> + F * 16<SUP>1</SUP> + A * 16<SUP>2
</SUP>+<SUP> </SUP>2 * 16<SUP>3</SUP> = 10997</P>
<P>(別忘了,在上面的計(jì)算中,A表示10,而F表示15)</P>
<P> </P>
<P>現(xiàn)在可以看出,所有進(jìn)制換算成10進(jìn)制,關(guān)鍵在于各自的權(quán)值不同。</P>
<P>假設(shè)有人問你,十進(jìn)數(shù) 1234 為什么是 一千二百三十四?你盡可以給他這么一個(gè)算式:</P>
<P>1234 = 1 * 10<SUP>3</SUP> + 2 * 10<SUP>2</SUP> + 3 * 10<SUP>1</SUP> + 4
* 10<SUP>0</SUP></P>
<P> </P>
<H4><A name=6.2.6>6.2.6</A> 十六進(jìn)制數(shù)的表達(dá)方法</H4>
<P>如果不使用特殊的書寫形式,16進(jìn)制數(shù)也會(huì)和10進(jìn)制相混。隨便一個(gè)數(shù):9876,就看不出它是16進(jìn)制或10進(jìn)制。</P>
<P>C,C++規(guī)定,<B>16進(jìn)制數(shù)必須以 0x開頭</B>。比如
0x1表示一個(gè)16進(jìn)制數(shù)。而1則表示一個(gè)十進(jìn)制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不區(qū)分大小寫。(注意:0x中的0是數(shù)字0,而不是字母O)</P>
<P>以下是一些用法示例:</P>
<P> </P>
<P>int a = 0x100F;</P>
<P>int b = 0x70 + a;</P>
<P> </P>
<P>至此,我們學(xué)完了所有進(jìn)制:10進(jìn)制,8進(jìn)制,16進(jìn)制數(shù)的表達(dá)方式。最后一點(diǎn)很重要,C/C++中,10進(jìn)制數(shù)有正負(fù)之分,比如12表示正12,而-12表示負(fù)12,;但<B>8進(jìn)制和16進(jìn)制只能用達(dá)無符號(hào)的正整數(shù)</B>,如果你在代碼中里:-078,或者寫:-0xF2,C,C++并不把它當(dāng)成一個(gè)負(fù)數(shù)。</P>
<P> </P>
<H4><A name=6.2.7>6.2.7</A> 十六進(jìn)制數(shù)在轉(zhuǎn)義符中的使用</H4>
<P> </P>
<P>轉(zhuǎn)義符也可以接一個(gè)16進(jìn)制數(shù)來表示一個(gè)字符。如在6.2.4小節(jié)中說的 '?' 字符,可以有以下表達(dá)方式:</P>
<P> </P>
<P>'?' //直接輸入字符</P>
<P>'\77' //用八進(jìn)制,此時(shí)可以省略開頭的0</P>
<P>'\0x3F' //用十六進(jìn)制</P>
<P> </P>
<P>同樣,這一小節(jié)只用于了解。除了空字符用八進(jìn)制數(shù) '\0' 表示以外,我們很少用后兩種方法表示一個(gè)字符。</P>
<P> </P>
<H3><A name=6.3>6.3</A> 十進(jìn)制數(shù)轉(zhuǎn)換到二、八、十六進(jìn)制數(shù)</H3>
<H4><A name=6.3.1>6.3.1</A> 10進(jìn)制數(shù)轉(zhuǎn)換為2進(jìn)制數(shù)</H4>
<P> </P>
<P>給你一個(gè)十進(jìn)制,比如:6,如果將它轉(zhuǎn)換成二進(jìn)制數(shù)呢?</P>
<P> </P>
<P>10進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),這是一個(gè)連續(xù)除2的過程:</P>
<P><B>把要轉(zhuǎn)換的數(shù),除以2,得到商和余數(shù),</B></P>
<P><B>將商繼續(xù)除以2,直到商為0。最后將所有余數(shù)倒序排列,得到數(shù)就是轉(zhuǎn)換結(jié)果。</B></P>
<P> </P>
<P>聽起來有些糊涂?我們結(jié)合例子來說明。比如要轉(zhuǎn)換6為二進(jìn)制數(shù)。</P>
<P> </P>
<P>“把要轉(zhuǎn)換的數(shù),除以2,得到商和余數(shù)”。</P>
<P> 那么:</P>
<P> 要轉(zhuǎn)換的數(shù)是6, 6 ÷ 2,得到<B>商是3,余數(shù)是0</B>。 (不要告訴我你不會(huì)計(jì)算6÷3!)</P>
<P> </P>
<P>“將商繼續(xù)除以2,直到商為0……”</P>
<P>現(xiàn)在商是3,還不是0,所以繼續(xù)除以2。</P>
<P>那就: 3 ÷ 2, 得到<B>商是1,余數(shù)是1</B>。</P>
<P> </P>
<P>“將商繼續(xù)除以2,直到商為0……”</P>
<P>現(xiàn)在商是1,還不是0,所以繼續(xù)除以2。</P>
<P>那就: 1 ÷ 2, 得到<B>商是0,余數(shù)是1</B> (拿筆紙算一下,1÷2是不是商0余1!)</P>
<P> </P>
<P>“將商繼續(xù)除以2,直到商為0……最后將所有余數(shù)倒序排列”</P>
<P>好極!現(xiàn)在商已經(jīng)是0。</P>
<P>我們?nèi)斡?jì)算依次得到余數(shù)分別是:0、1、1,將所有余數(shù)倒序排列,那就是:110了!</P>
<P> </P>
<P>6轉(zhuǎn)換成二進(jìn)制,結(jié)果是110。</P>
<P> </P>
<P>把上面的一段改成用表格來表示,則為:</P>
<TABLE borderColor=#000000 cellSpacing=0 cellPadding=0 width="42%"
border=1>
<TBODY>
<TR>
<TD width="25%">被除數(shù)</TD>
<TD width="25%">計(jì)算過程</TD>
<TD width="25%">商</TD>
<TD width="25%">余數(shù)</TD></TR>
<TR>
<TD width="25%">6</TD>
<TD width="25%">6/2</TD>
<TD width="25%">3</TD>
<TD width="25%">0</TD></TR>
<TR>
<TD width="25%">3</TD>
<TD width="25%">3/2</TD>
<TD width="25%">1</TD>
<TD width="25%">1</TD></TR>
<TR>
<TD width="25%">1</TD>
<TD width="25%">1/2</TD>
<TD width="25%">0</TD>
<TD width="25%">1</TD></TR></TBODY></TABLE>
<P>(在計(jì)算機(jī)中,÷用 / 來表示)
<P>
<P>如果是在考試時(shí),我們要畫這樣表還是有點(diǎn)費(fèi)時(shí)間,所更常見的換算過程是使用下圖的連除:
<P><IMG height=315 src="第6章 二進(jìn)制、八進(jìn)制、十六進(jìn)制.files/ls06.h2.gif" width=441
border=0>
<P>(圖:1)
<P>請大家對照圖,表,及文字說明,并且自已拿筆計(jì)算一遍如何將6轉(zhuǎn)換為二進(jìn)制數(shù)。
<P>說了半天,我們的轉(zhuǎn)換結(jié)果對嗎?二進(jìn)制數(shù)110是6嗎?你已經(jīng)學(xué)會(huì)如何將二進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制數(shù)了,所以請現(xiàn)在就計(jì)算一下110換成10進(jìn)制是否就是6。
<P>
<H4><A name=6.3.2>6.3.2</A> 10進(jìn)制數(shù)轉(zhuǎn)換為8、16進(jìn)制數(shù)</H4>
<P> </P>
<P>非常開心,10進(jìn)制數(shù)轉(zhuǎn)換成8進(jìn)制的方法,和轉(zhuǎn)換為2進(jìn)制的方法類似,惟一變化:除數(shù)由2變成8。</P>
<P> </P>
<P>來看一個(gè)例子,如何將十進(jìn)制數(shù)120轉(zhuǎn)換成八進(jìn)制數(shù)。</P>
<P> </P>
<P>用表格表示:</P>
<TABLE borderColor=#000000 cellSpacing=0 cellPadding=0 width="42%"
border=1>
<TBODY>
<TR>
<TD width="25%">被除數(shù)</TD>
<TD width="25%">計(jì)算過程</TD>
<TD width="25%">商</TD>
<TD width="25%">余數(shù)</TD></TR>
<TR>
<TD width="25%">120</TD>
<TD width="25%">120/8</TD>
<TD width="25%">15</TD>
<TD width="25%">0</TD></TR>
<TR>
<TD width="25%">15</TD>
<TD width="25%">15/8</TD>
<TD width="25%">1</TD>
<TD width="25%">7</TD></TR>
<TR>
<TD width="25%">1</TD>
<TD width="25%">1/8</TD>
<TD width="25%">0</TD>
<TD width="25%">1</TD></TR></TBODY></TABLE>
<P> </P>
<P>120轉(zhuǎn)換為8進(jìn)制,結(jié)果為:170。</P>
<P> </P>
<P>非常非常開心,10進(jìn)制數(shù)轉(zhuǎn)換成16進(jìn)制的方法,和轉(zhuǎn)換為2進(jìn)制的方法類似,惟一變化:除數(shù)由2變成16。</P>
<P> </P>
<P>同樣是120,轉(zhuǎn)換成16進(jìn)制則為:</P>
<TABLE borderColor=#000000 cellSpacing=0 cellPadding=0 width="42%"
border=1>
<TBODY>
<TR>
<TD width="25%">被除數(shù)</TD>
<TD width="25%">計(jì)算過程</TD>
<TD width="25%">商</TD>
<TD width="25%">余數(shù)</TD></TR>
<TR>
<TD width="25%">120</TD>
<TD width="25%">120/16</TD>
<TD width="25%">7</TD>
<TD width="25%">8</TD></TR>
<TR>
<TD width="25%">7</TD>
<TD width="25%">7/16</TD>
<TD width="25%">0</TD>
<TD width="25%">7</TD></TR></TBODY></TABLE>
<P> </P>
<P>120轉(zhuǎn)換為16進(jìn)制,結(jié)果為:78。</P>
<P> </P>
<P>請拿筆紙,采用(圖:1)的形式,演算上面兩個(gè)表的過程。</P>
<P> </P>
<H3><A name=6.4>6.4</A> 二、十六進(jìn)制數(shù)互相轉(zhuǎn)換</H3>
<P> </P>
<P>二進(jìn)制和十六進(jìn)制的互相轉(zhuǎn)換比較重要。不過這二者的轉(zhuǎn)換卻不用計(jì)算,每個(gè)C,C++程序員都能做到看見二進(jìn)制數(shù),直接就能轉(zhuǎn)換為十六進(jìn)制數(shù),反之亦然。</P>
<P>我們也一樣,只要學(xué)完這一小節(jié),就能做到。</P>
<P>首先我們來看一個(gè)二進(jìn)制數(shù):1111,它是多少呢?</P>
<P>你可能還要這樣計(jì)算:1 * 2<SUP>0</SUP> + 1 * 2<SUP>1</SUP> + 1 * 2<SUP>2 </SUP>+ 1
* 2<SUP>3</SUP> = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。</P>
<P>然而,由于1111才4位,所以我們必須直接記住它每一位的權(quán)值,并且是從高位往低位記,:8、4、2、1。即,最高位的權(quán)值為2<SUP>3
</SUP>= 8,然后依次是 2<SUP>2</SUP> = 4,<SUP>21</SUP>=2, 2<SUP>0</SUP> = 1。</P>
<P> </P>
<P>記住8421,對于任意一個(gè)4位的二進(jìn)制數(shù),我們都可以很快算出它對應(yīng)的10進(jìn)制值。</P>
<P> </P>
<P>下面列出四位二進(jìn)制數(shù) xxxx 所有可能的值(中間略過部分)</P>
<P> </P>
<P>僅4位的2進(jìn)制數(shù) 快速計(jì)算方法 十進(jìn)制值 十六進(jìn)值</P>
<P>1111 = 8 + 4 + 2 + 1 =
15 F</P>
<P>1110 = 8 + 4 + 2 + 0 =
14 E</P>
<P>1101 = 8 + 4 + 0 + 1 =
13
D </P>
<P>1100 = 8 + 4 + 0 + 0 =
12
C </P>
<P>1011 = 8 + 4 + 0 + 1 =
11
B </P>
<P>1010 = 8 + 0 + 2 + 0 =
10 A</P>
<P>1001 = 8 + 0 + 0 + 1 =
10 9</P>
<P>....</P>
<P>0001 = 0 + 0 + 0 + 1 =
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -