綜述:
程式設計中,我們常用的還是10
進製……
必竟c/c++
是高階語言。比如:
int a = 100,b = 99;
不過,由於資料在計算機中的表示,最終以二進位制的形式存在,所以有時候使用二進位制,可以更直觀地解決問題。但,二進位制數太長了。比如int
型別占用
4個位元組,
32位。比如
100,用
int型別的二進位制數表達將是:
0000 0000 0000 0000 0110 0100
面對這麼長的數進行思考或操作,沒有人會喜歡。因此,
c,c++
沒有提供在**直接寫二進位制數的方法。
用16進製制或
8進製可以解決這個問題。因為,進製越大,數的表達長度也就越短。不過,為什麼偏偏是16或
8進製,而不其它的,諸如9或
20進製呢?2、
8、16,分別是2的
1次方,
3次方,
4次方。這一點使得三種進製之間可以非常直接地互相轉換。
8進製或
16進製制縮短了二進位制數,但保持了二進位制數的表達特點。在下面的關於進製轉換的課程中,你可以發現這一點。
二、八、十六進製制數轉換到十進位制數:
二進位制數轉換為十進位制數
:0110 0100轉換
1 * 2
e2+ 1 * 2
e3+ 1 * 2
e5+ 1 * 2
e6= 100
八進位制數轉換為十進位制數
: 八進位制就是逢8進1
。八進位制數採用 0~
7這八數來表達乙個數。
1507
換算成十進位制
:7 * 8
e0+ 0 * 8
e1+ 5 * 8
e2 + 1 * 8
e3 = 839
16進製制就是逢16進
1,但我們只有
0~9這十個數字,所以我們用a,
b,c,
d,e,
f這五個字母來分別表示10,
11,12,
13,14,
15。字母不區分大小寫。
2af5
換算成10進製:
5 * 16
e0 + f * 16
e1 + a * 16
e2 + 2 * 16
e3 = 10997
十進位制數轉換到
二、八、十六進製制數
10進製數轉換為
2進製數
:比如:6
,如果將它轉換成二進位制數是
10進製數轉換為
8進製:轉換
的方法,和轉換為2
進製的方法類似,惟一變化:除數由2變成
8。120轉換為
8進製,結果為:
17010
進製數轉換成
16進製制
,和轉換為2
進製的方法類似,惟一變化:除數由2變成
16。同樣是
120,轉換成
16進製制則為:78
八進位制數的表達方法
和在轉義符中的使用
c,c++規定,乙個數如果要指明它採用八進位制,必須在它前面加上乙個
0,如:
123是十進位制,但
0123
則表示採用八進位制。
如:int a = 100;我們也可以這樣寫:
int a = 0144; //0144
是八進位制的
100。
千萬記住,用八進位制表達時,你不能少了最前的那個0
。否則計算機會通通當成
10進製。不過,有乙個地方使用八進位制數時,卻不能使用加
0,那就是我們前面學的用於表達字元的
「轉義符
」表達法。
轉義符'\'
後面接乙個八進位制數,用於表示
ascii
碼等於該值的字元。比如,字元(?)的
ascii
值是63
,那麼我們可以把它轉換為八進值:
77,然後用
'\77'
來表示'?'
。由於是八進位制,所以本應寫成
'\077'
,但因為
c,c++
規定不允許使用斜槓加
10進製數來表示字元,所以這裡的
0可以不寫。
十六進製制數的表達方法
和在轉義符中的使用 c,
c++規定,
16進製制數必須以
0x開頭。比如
0x1表示乙個
16進製制數。而
1則表示乙個十進位制。另外如:
0xff,0xff,0x102a,
等等。其中的
x也也不區分大小寫。
(注意:
0x中的
0是數字
0,而不是字母
o),如:
int a = 0x100f;int b = 0x70 + a;
注意:c/c++中,
10進製數有正負之分,比如
12表示正
12,而
-12表示負
12,;
但8
進製和16
進製只能用達無符號的正整數,如果你在**中里:
-078
,或者寫:
-0xf2,c,c++
並不把它當成乙個負數。
轉義符也可以接乙個16
進製數來表示乙個字元。如
'?'
字元,可以有以下表達方式:
'?' //
直接輸入字元
'\77' //用八進位制,此時可以省略開頭的
0'\0x3f' //用十六進製制
二、十六進製制數互相轉換
二進位制和十六進製制的互相轉換比較重要。不過這二者的轉換卻不用計算,每個c
,c++
程式設計師都能做到看見二進位制數,直接就能轉換為十六進製制數,反之亦然。
2進製數
快速計算方法
十進位制值
十六進值
1111
= 8 + 4 + 2 + 1 = 15 f
1110
= 8 + 4 + 2 + 0 = 14 e
1101 = 8 + 4 + 0 + 1 = 13
d
1100 = 8 + 4 + 0 + 0 = 12
c
1011 = 8 + 4 + 0 + 1 = 11
b
1010 = 8 + 0 + 2 + 0 = 10 a
1001 = 8 + 0 + 0 + 1 = 10 9
二進位制數要轉換為十六進製制,就是以4
位一段,分別轉換為十六進製制。
1111 1101 ,
1010 0101
, 1001 1011
f
d ,
a
5 ,
9 b
反過來,當我們看到 fd
時,迅速將它轉換為二進位制數
:fd轉換為二進位制數,為:
1111 1011
由於十六進製制轉換成二進位制相當直接,所以,我們需要將乙個十進位制數轉換成2
進製數時,也可以先轉換成
16進製制,然後再轉換成
2進製。比如,十進位制數
1234
轉換成二制數,如果要一直除以
2,直接得到
2進製數,需要計算較多次數。所以我們可以先除以
16,得到
16進製制數
: 0x4d2
然後我們可直接寫出
0x4d2
的二進位制形式:
0100 1011 0010。
同樣,如果乙個二進位制數很長,我們需要將它轉換成10
進製數時,除了前面學過的方法是,我們還可以先將這個二進位制轉換成
16進製制,然後再轉換為
10進製。下面舉例乙個
int型別的二進位制數:
01101101 11100101 10101111 00011011
我們按四位一組轉換為
16進製制:
6d e5 af 1b
二進位制 八進位制和十六進製制
我們平時使用的數字都是由 0 9 共十個數字組成的,例如 1 9 10 297 952 等,乙個數字最多能表示九,如果要表示 十 十一 二十 九 一百等,就需要多個數字組合起來。例如表示 5 8 的結果,乙個數字不夠,只能 進製 用 13 來表示 這時 進一位 相當於十,進兩位 相當於二十。因為逢十...
二進位制 八進位制和十六進製制
進製也就是進製。進行加法運算時逢 x進一 滿 x進一 進行減法運算時藉一當 x,這就是 x進製,這種進製也就包含 x個數字,基數為 x。十進位制有 0 9共 10個數字,基數為 10,在加減法運算中,逢十進一,借一當十。我們不妨將思維拓展一下,既然可以用 0 9共十個數字來表示數值,那麼也可以用0 ...
二進位制 八進位制 十六進製制
生活中我們普遍用十進位制,逢十進一。同理,二進位制八進位制和十六進製制是逢二進 一 逢八進 一 逢十六進一。十進位制是便於人理解而二進位制是便於電腦理解。二進位制在計算機內部使用是再自然不過的。但在人機交流上,二進位制有致命的弱點 數字的書寫特別冗長。二進位制和八進位制 二進位制和十六進製制之間的換...