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