c語言二進位制八進位制和十六進製制的總結

2021-07-06 08:25:12 字數 4312 閱讀 9105

綜述:

程式設計中,我們常用的還是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 ...

二進位制 八進位制 十六進製制

生活中我們普遍用十進位制,逢十進一。同理,二進位制八進位制和十六進製制是逢二進 一 逢八進 一 逢十六進一。十進位制是便於人理解而二進位制是便於電腦理解。二進位制在計算機內部使用是再自然不過的。但在人機交流上,二進位制有致命的弱點 數字的書寫特別冗長。二進位制和八進位制 二進位制和十六進製制之間的換...