十進制與二進制八進制十六進制的轉換

 

10轉16: 
  100以內一點的10轉16心算比較快,複雜的用“計算器”算了。10轉16用傳統的計算方式可以了,就是大於15小於256的10進制數除以16爲的值爲十位的16進制數,其餘數爲個位的16進制數,沒餘數則個位爲0。如61的16進制是3D,61除以16得3餘13,3作十位數,13轉成D爲各位數。

  16轉10:
  用相反的道理,將十位數乘以16加上個位數。如5A,將5乘以16得80,加上A的10進制10,結果是90。

  其實這些都是計算機基礎,基本上學過計算機的都會學到這些,但留意一下,他們對於修改是十分有用的,平時多多留意,多多試驗,你也會成爲修改高手。

   個人推薦使用:WINDOWS中點擊“開始”--”程序“--“附件”--“計算器”,按 “查看”再選“科學型”,就可以方便的進行各進制的轉換了(如:你要轉換10進制90000000爲16進制,點“十進制”,輸入90000000,再點一下“16進制”,就會看到55D4A80,轉換就完成了。其他同理)。 

   二進制、八進制、十六進制
    

這是一節“前不着村後不着店”的課。不同進制之間的轉換純粹是數學上的計算。不過,你不必擔心會有麼複雜,無非是乘或除的計算。

生活中其實很多地方的計數方法都多少有點不同進制的影子。

比如我們最常用的10進制,其實起源於人有10個指頭。如果我們的祖先始終沒有擺脫手腳不分的境況,我想我們現在一定是在使用20進制。

至於二進制……沒有襪子稱爲0只襪子,有一隻襪子稱爲1只襪子,但若有兩襪子,則我們常說的是:1雙襪子。

生活中還有:七進制,比如星期。十六進制,比如小時或“一打”,六十進制,比如分鐘或角度……

 

6.1爲什麼需要八進制和十六進制?

 

編程中,我們常用的還是10進制……必竟C/C++是高級語言。

比如:

inta=100,b=99;

不過,由於數據在計算機中的表示,最終以二進制的形式存在,所以有時候使用二進制,可以更直觀地解決問題。

但,二進制數太長了。比如int類型佔用4個字節,32位。比如100,用int類型的二進制數表達將是:

000000000000000001100100

面對這麼長的數進行思考或操作,沒有人會喜歡。因此,C,C++沒有提供在代碼直接寫二進制數的方法。

 

用16進制或8進制可以解決這個問題。因爲,進制越大,數的表達長度也就越短。不過,爲什麼偏偏是16或8進制,而不其它的,諸如9或20進制呢?

2、8、16,分別是2的1次方,3次方,4次方。這一點使得三種進制之間可以非常直接地互相轉換。8進制或16進制縮短了二進制數,但保持了二進制數的表達特點。在下面的關於進制轉換的課程中,你可以發現這一點。

 

6.2二、八、十六進制數轉換到十進制數

6.2.1二進制數轉換爲十進制數

二進制數第0位的權值是2的0次方,第1位的權值是2的1次方……

所以,設有一個二進制數:01100100,轉換爲10進製爲:

下面是豎式:

 

01100100換算成十進制

 

第0位0*20 = 0

第1位0*21 = 0

第2位1*22 = 4

第3位0*23 = 0

第4位0*24 = 0

第5位1*25 =32

第6位1*26 =64

第7位0*27 = 0    +

---------------------------

             100  

 

用橫式計算爲:

0*20+0*21+1*22+1*23+0*24+1*25+1*26+0*27=100

 

0乘以多少都是0,所以我們也可以直接跳過值爲0的位:

1*22+1*23+ 1*25+1*26=100

 

6.2.2八進制數轉換爲十進制數

八進制就是逢8進1。

八進制數採用0~7這八數來表達一個數。

八進制數第0位的權值爲8的0次方,第1位權值爲8的1次方,第2位權值爲8的2次方……

所以,設有一個八進制數:1507,轉換爲十進制爲:

用豎式表示:

 

1507換算成十進制。

 

第0位7*80=7

第1位0*81=0

第2位5*82=320

第3位1*83=512  +

--------------------------

             839

同樣,我們也可以用橫式直接計算:

7*80+0*81+5*82+1*83=839

 

結果是,八進制數1507轉換成十進制數爲839

 

6.2.3八進制數的表達方法

C,C++語言中,如何表達一個八進制數呢?如果這個數是876,我們可以斷定它不是八進制數,因爲八進制數中不可能出7以上的阿拉伯數字。但如果這個數是123、是567,或12345670,那麼它是八進制數還是10進制數,都有可能。

所以,C,C++規定,一個數如果要指明它採用八進制,必須在它前面加上一個0,如:123是十進制,但0123則表示採用八進制。這就是八進制數在C、C++中的表達方法。

由於C和C++都沒有提供二進制數的表達方法,所以,這裏所學的八進制是我們學習的,CtC++語言的數值表達的第二種進製法。

現在,對於同樣一個數,比如是100,我們在代碼中可以用平常的10進製表達,例如在變量初始化時:

 

inta=100;

我們也可以這樣寫:

inta=0144;//0144是八進制的100;一個10進制數如何轉成8進制,我們後面會學到。

 

千萬記住,用八進制表達時,你不能少了最前的那個0。否則計算機會通通當成10進制。不過,有一個地方使用八進制數時,卻不能使用加0,那就是我們前面學的用於表達字符的“轉義符”表達法。

 

6.2.4八進制數在轉義符中的使用

我們學過用一個轉義符'/'加上一個特殊字母來表示某個字符的方法,如:'/n'表示換行(line),而'/t'表示Tab字符,'/''則表示單引號。今天我們又學習了一種使用轉義符的方法:轉義符'/'後面接一個八進制數,用於表示ASCII碼等於該值的字符。

比如,查一下

(在計算機中,÷用/來表示)

 

如果是在考試時,我們要畫這樣表還是有點費時間,所更常見的換算過程是使用下圖的連除:

 

(圖:1)

請大家對照圖,表,及文字說明,並且自已拿筆計算一遍如何將6轉換爲二進制數。

說了半天,我們的轉換結果對嗎?二進制數110是6嗎?你已經學會如何將二進制數轉換成10進制數了,所以請現在就計算一下110換成10進制是否就是6。

 

6.3.210進制數轉換爲8、16進制數

 

非常開心,10進制數轉換成8進制的方法,和轉換爲2進制的方法類似,惟一變化:除數由2變成8。

 

來看一個例子,如何將十進制數120轉換成八進制數。

 

用表格表示:

 

120轉換爲8進制,結果爲:170。

 

非常非常開心,10進制數轉換成16進制的方法,和轉換爲2進制的方法類似,惟一變化:除數由2變成16。

 

同樣是120,轉換成16進制則爲:

 

120轉換爲16進制,結果爲:78。

 

請拿筆紙,採用(圖:1)的形式,演算上面兩個表的過程。

 

6.4二、十六進制數互相轉換

 

二進制和十六進制的互相轉換比較重要。不過這二者的轉換卻不用計算,每個C,C++程序員都能做到看見二進制數,直接就能轉換爲十六進制數,反之亦然。

我們也一樣,只要學完這一小節,就能做到。

首先我們來看一個二進制數:1111,它是多少呢?

你可能還要這樣計算:1*20+1*21+1*22+1*23=1*1+1*2+1*4+1*8=15。

然而,由於1111才4位,所以我們必須直接記住它每一位的權值,並且是從高位往低位記,:8、4、2、1。即,最高位的權值爲23=8,然後依次是22=4,21=2,20=1。

 

記住8421,對於任意一個4位的二進制數,我們都可以很快算出它對應的10進制值。

 

下面列出四位二進制數xxxx所有可能的值(中間略過部分)

 

僅4位的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

....

0001       =0+0+0+1 =1          1

0000       =0+0+0+0 =0          0

 

二進制數要轉換爲十六進制,就是以4位一段,分別轉換爲十六進制。

如(上行爲二制數,下面爲對應的十六進制):

 

11111101,10100101,10011011

 F   D  , A   5  , 9   B  

 

反過來,當我們看到FD時,如何迅速將它轉換爲二進制數呢?

先轉換F:

看到F,我們需知道它是15(可能你還不熟悉A~F這五個數),然後15如何用8421湊呢?應該是8+4+2+1,所以四位全爲1:1111。

接着轉換D:

看到D,知道它是13,13如何用8421湊呢?應該是:8+2+1,即:1011。

所以,FD轉換爲二進制數,爲:11111011

 

由於十六進制轉換成二進制相當直接,所以,我們需要將一個十進制數轉換成2進制數時,也可以先轉換成16進制,然後再轉換成2進制。

比如,十進制數1234轉換成二制數,如果要一直除以2,直接得到2進制數,需要計算較多次數。所以我們可以先除以16,得到16進制數:

 

結果16進製爲:0x4D2

 

然後我們可直接寫出0x4D2的二進制形式:010010110010。

其中對映關係爲:

0100--4

1011--D

0010--2

 

同樣,如果一個二進制數很長,我們需要將它轉換成10進制數時,除了前面學過的方法是,我們還可以先將這個二進制轉換成16進制,然後再轉換爲10進制。

下面舉例一個int類型的二進制數:

01101101111001011010111100011011

我們按四位一組轉換爲16進制:6DE5AF1B

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章