?? 教學--第六章 二進制、八進制、十六進制.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://d2school.com/bcyl/bhcpp/newls/ls06.htm -->
<HTML><HEAD><TITLE>教學--第六章 二進制、八進制、十六進制</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>P {
MARGIN: 1px 2px; LINE-HEIGHT: 150%
}
.節標題 {
FONT-WEIGHT: bold; FONT-SIZE: 12pt
}
TD {
FONT-SIZE: 9pt
}
.tdtitle {
FONT-SIZE: 20pt
}
.celltopline {
BORDER-TOP: #000000 1px solid
}
.menucell {
FONT-SIZE: 10pt
}
#glowtext {
FONT-SIZE: 10pt; FILTER: glow(color=red,strength=1); WIDTH: 100%
}
A:link {
FONT: 10pt 宋體; COLOR: blue; TEXT-DECORATION: none
}
A:visited {
FONT: 10pt 宋體; COLOR: purple; TEXT-DECORATION: none
}
A:active {
FONT: 10pt 宋體; COLOR: red; TEXT-DECORATION: underline
}
A:hover {
COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=3><!-- 標題 --><!--標題結束 --><A name=頁首></A>
<CENTER>
<TABLE height=154 cellSpacing=4 cellPadding=4 width=760 border=0>
<TBODY>
<TR>
<TD
style="FONT-SIZE: 10pt; MARGIN-LEFT: 12px; TEXT-INDENT: 20px; LINE-HEIGHT: 150%; MARGIN-RIGHT: 12px; FONT-FAMILY: 宋體"
width="100%" height=148>
<H2> </H2>
<H2>第六章 二進制、八進制、十六進制</H2>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.1">6.1
為什么需要八進制和十六進制?</A></P>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2">6.2
二、八、十六進制數轉換到十進制數</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2.1">6.2.1
二進制數轉換為十進制數</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2.2">6.2.2
八進制數轉換為十進制數</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2.3">6.2.3
八進制數的表達方法</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2.4">6.2.4
八進制數在轉義符中的使用</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2.5">6.2.5
十六進制數轉換成十進制數</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2.6">6.2.6
十六進制數的表達方法</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.2.7">6.2.7
十六進制數在轉義符中的使用</A></P>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.3">6.3
十進制數轉換到二、八、十六進制數</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.3.1">6.3.1
10進制數轉換為2進制數</A></P>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.3.2">6.3.2
10進制數轉換為8、16進制數</A></P>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.4">6.4
二、十六進制數互相轉換</A></P>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.5">6.5
原碼、反碼、補碼</A></P>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.6">6.6
通過調試查看變量的值</A></P>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls06.htm#6.7">6.7
本章小結</A><BR></P>
<P>這是一節“前不著村后不著店”的課。不同進制之間的轉換純粹是數學上的計算。不過,你不必擔心會有么復雜,無非是乘或除的計算。</P>
<P>生活中其實很多地方的計數方法都多少有點不同進制的影子。</P>
<P>比如我們最常用的10進制,其實起源于人有10個指頭。如果我們的祖先始終沒有擺脫手腳不分的境況,我想我們現在一定是在使用20進制。</P>
<P>至于二進制……沒有襪子稱為0只襪子,有一只襪子稱為1只襪子,但若有兩襪子,則我們常說的是:1雙襪子。</P>
<P>生活中還有:七進制,比如星期。十六進制,比如小時或“一打”,六十進制,比如分鐘或角度……</P>
<P> </P>
<H3><A name=6.1>6.1</A> 為什么需要八進制和十六進制?</H3>
<P> </P>
<P>編程中,我們常用的還是10進制……必竟C/C++是高級語言。</P>
<P>比如:</P>
<P>int a = 100,b = 99;</P>
<P>不過,由于數據在計算機中的表示,最終以二進制的形式存在,所以有時候使用二進制,可以更直觀地解決問題。</P>
<P>但,二進制數太長了。比如int 類型占用4個字節,32位。比如100,用int類型的二進制數表達將是:</P>
<P>0000 0000 0000 0000 0110 0100</P>
<P>面對這么長的數進行思考或操作,沒有人會喜歡。因此,C,C++ 沒有提供在代碼直接寫二進制數的方法。</P>
<P> </P>
<P>用16進制或8進制可以解決這個問題。因為,<B>進制越大,數的表達長度也就越短</B>。不過,為什么偏偏是16或8進制,而不其它的,諸如9或20進制呢?</P>
<P>2、8、16,分別是2的1次方,3次方,4次方。這一點使得三種進制之間可以非常直接地互相轉換。8進制或16進制縮短了二進制數,但保持了二進制數的表達特點。在下面的關于進制轉換的課程中,你可以發現這一點。</P>
<P> </P>
<H3><A name=6.2>6.2</A> 二、八、十六進制數轉換到十進制數</H3>
<H4><A name=6.2.1>6.2.1</A> 二進制數轉換為十進制數</H4>
<P>二進制數第0位的權值是2的0次方,第1位的權值是2的1次方……</P>
<P>所以,設有一個二進制數:0110 0100,轉換為10進制為:</P>
<P>下面是豎式:</P>
<P> </P>
<P>0110 0100 換算成 十進制</P>
<P> </P>
<P>第0位 0 * 2<SUP>0</SUP> = 0</P>
<P>第1位 0 * 2<SUP>1</SUP> = 0</P>
<P>第2位 1 * 2<SUP>2</SUP> = 4</P>
<P>第3位 0 * 2<SUP>3</SUP> = 0</P>
<P>第4位 0 * 2<SUP>4</SUP> = 0</P>
<P>第5位 1 * 2<SUP>5</SUP> = 32</P>
<P>第6位 1 * 2<SUP>6</SUP> = 64</P>
<P>第7位 0 * 2<SUP>7</SUP> = 0 +</P>
<P>---------------------------</P>
<P>
100 </P>
<P> </P>
<P>用橫式計算為:</P>
<P>0 * 2<SUP>0 </SUP>+ 0 * 2<SUP>1</SUP> + 1 * 2<SUP>2</SUP> + 1 *
2<SUP>3</SUP> + 0 * 2<SUP>4</SUP> + 1 * 2<SUP>5</SUP> + 1 * 2<SUP>6</SUP>
<P> </P>
<P>0乘以多少都是0,所以我們也可以直接跳過值為0的位:</P>
<P>1 * 2<SUP>2</SUP> + 1 * 2<SUP>3</SUP> + 1 * 2<SUP>5</SUP> + 1 *
2<SUP>6</SUP> = 100</P>
<P> </P>
<H4><A name=6.2.2>6.2.2</A> 八進制數轉換為十進制數</H4>
<P>八進制就是逢8進1。</P>
<P>八進制數采用 0~7這八數來表達一個數。</P>
<P>八進制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方……</P>
<P>所以,設有一個八進制數:1507,轉換為十進制為:</P>
<P>用豎式表示:</P>
<P> </P>
<P>1507換算成十進制。</P>
<P> </P>
<P>第0位 7 * 8<SUP>0</SUP> = 7</P>
<P>第1位 0 * 8<SUP>1</SUP> = 0 </P>
<P>第2位 5 * 8<SUP>2</SUP> = 320 </P>
<P>第3位 1 * 8<SUP>3</SUP> = 512 +</P>
<P>--------------------------</P>
<P>
839</P>
<P>同樣,我們也可以用橫式直接計算:</P>
<P>7 * 8<SUP>0</SUP> + 0 * 8<SUP>1</SUP> + 5 * 8<SUP>2</SUP> + 1 * 8<SUP>3
= </SUP>839</P>
<P> </P>
<P>結果是,八進制數 1507 轉換成十進制數為 839</P>
<P> </P>
<H4><A name=6.2.3>6.2.3</A> 八進制數的表達方法</H4>
<P>C,C++語言中,如何表達一個八進制數呢?如果這個數是
876,我們可以斷定它不是八進制數,因為八進制數中不可能出7以上的阿拉伯數字。但如果這個數是123、是567,或12345670,那么它是八進制數還是10進制數,都有可能。</P>
<P>所以,C,C++規定,<B>一個數如果要指明它采用八進制,必須在它前面加上一個0</B>,如:123是十進制,但0123則表示采用八進制。這就是八進制數在C、C++中的表達方法。</P>
<P>由于C和C++都沒有提供二進制數的表達方法,所以,這里所學的八進制是我們學習的,CtC++語言的數值表達的第二種進制法。</P>
<P>現在,對于同樣一個數,比如是100,我們在代碼中可以用平常的10進制表達,例如在變量初始化時:</P>
<P> </P>
<P>int a = 100;</P>
<P>我們也可以這樣寫:</P>
<P>int a = 0144; //0144是八進制的100;一個10進制數如何轉成8進制,我們后面會學到。</P>
<P> </P>
<P>千萬記住,用八進制表達時,你不能少了最前的那個0。否則計算機會通通當成10進制。不過,有一個地方使用八進制數時,卻不能使用加0,那就是我們前面學的用于表達字符的“轉義符”表達法。</P>
<P> </P>
<H4><A name=6.2.4>6.2.4</A> 八進制數在轉義符中的使用</H4>
<P>我們學過用一個轉義符'\'加上一個特殊字母來表示某個字符的方法,如:'\n'表示換行(line),而'\t'表示Tab字符,'\''則表示單引號。今天我們又學習了一種使用轉義符的方法:轉義符'\'后面接一個八進制數,用于表示ASCII碼等于該值的字符。</P>
<P>比如,查一下<A
href="http://d2school.com/bcyl/bhcpp/newls/ls05.htm#美國信息交換標準碼">第5章中的ASCII碼表</A>,我們找到問號字符(?)的ASCII值是63,那么我們可以把它轉換為八進值:77,然后用
'\77'來表示'?'。由于是八進制,所以本應寫成
'\077',但因為C,C++規定不允許使用斜杠加10進制數來表示字符,所以這里的0可以不寫。</P>
<P>事實上我們很少在實際編程中非要用轉義符加八進制數來表示一個字符,所以,6.2.4小節的內容,大家僅僅了解就行。</P>
<P> </P>
<H4><A name=6.2.5>6.2.5</A> 十六進制數轉換成十進制數</H4>
<P>2進制,用兩個阿拉伯數字:0、1;</P>
<P>8進制,用八個阿拉伯數字:0、1、2、3、4、5、6、7;</P>
<P>10進制,用十個阿拉伯數字:0到9;</P>
<P>16進制,用十六個阿拉伯數字……等等,阿拉伯人或說是印度人,只發明了10個數字啊?</P>
<P> </P>
<P>16進制就是逢16進1,但我們只有0~9這十個數字,所以我們<B>用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15</B>。字母不區分大小寫。</P>
<P>十六進制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方……</P>
<P>所以,在第N(N從0開始)位上,如果是是數 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小為 X * 16的N次方。</P>
<P>假設有一個十六進數 2AF5, 那么如何換算成10進制呢?</P>
<P> </P>
<P>用豎式計算: </P>
<P> </P>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -