一、進位的概念
計算機中使用二進位編碼(只有0和1)表示數據,且只存在二進位。
而C程序代碼中的整數常量,為了書寫方便,用十進位、八進位、十六進位表示,比如:十進位整數123、-23、+99等。
而無論十進位、八進位還是十六進位數據在計算機中表示是轉換成二進位編碼表示,計算機中只存在二進位。
基數:進位計數制採用R個基本符號,則R為數制的基數。
運算:「逢R進一,借一當R」。
十進位 R=10,可使用0,1,2,3,4,5,6,7,8,9
二進位 R=2 , 可使用0,1
八進位 R=8 , 可使用0,1,2,3,4,5,6,7
十六進位 R=16,可使用0,……,9,A,B,C,D,E,F
1、十進位表示
基數:10 (所含數碼的個數)
權:10x (表明數碼所在的位置)
數碼:0 ~ 9
按權展開求和,用權10x表示數碼的位置,等號=左右表達式相等。
例如: 123.45=1×102+2×101+3×100+4×10-1+5×10-2
2、二進位數:
基數:2
權:2x
數碼:0 、 1
二進位轉換成十進位:二進位數按權(2x)展開求和,得相應的十進位值。
例如:1010.11=1×23+0×22+1×21+0×20+1×2-1+1×2-2=10.75
即二進位數1010.11等於十進位數10.75。
二進位數權值:128 64 32 16 8 4 2 1
即20=1,21=2,22=4,……,
則二進位數111=1×22+1×21+
1×20=4+2+1=7(十進位數)。
3、八進位表示
基數:8
權:8x
數碼:0 ~ 7
八進位轉換成十進位:八進位數按權(8x)展開求和,得相應的十進位值。
例如:023=2×81+3×80 =19
即八進位數023等於十進位數19。
註:C語言中八進位數第一個數字必須為0(八進位標誌)
例如:0213 -030 +056 -0123
4、十六進位表示
基數:16
權:16X
數碼:0 ~ 9,A,B,C,D,E,F(一共16個數碼,從0開始,其中A,B,C,D,E,F分別表示十進位數10、11、12、13、14、15)
十六進位轉換成十進位:十六進位數按權(16x)展開求和,得相應的十進位值。
例如:0XBF3C=11×163+15×162+3×161+12×160=48956
即十六進位數0XBF3C等於十進位數48956。
註:十六進位數前兩個數字必須為 0X(十六進位標誌)
例如:0X213 -0X30 +0X56 -0X12A
二、進位轉換
1、二進位、八進位、十六進位轉換成十進位,用按權展開求和。(如上)
2、十進位轉換成二進位、八進位或十六進位,用商整除基數逆向取餘法。
1)十進位整數轉換為二進位整數的方法為:除2逆向取餘數。
首先,十進位整數105除以2, 商為52,餘數為:105-2*52=1。
繼續,用商52除以2,商為26,餘數為: 52-2*26=0。
繼續,用商26除以2,商為13,餘數為:26-2*13=0。
繼續,用商13除以2,商為6,餘數為:13-2*6=1。
繼續,用商6除以2,商為3,餘數為:6-2*3=0。
繼續,用商3除以2,商為1,餘數為:3-2*1=1。
繼續,用商1除以2,商為0,餘數為:1-2*0=1。
直到商為0,結束。
先算出來的餘數作為二進位數的低位,後算出來的餘數作為二進位數的高位,即十進位數105轉換為二進位數為1101001,所以是逆向取餘。
2)十進位整數轉換為八進位整數的方法為:除8逆向取餘數。
首先,十進位整數100除以8, 商為12,餘數為:100-8*12=4。
繼續,用商12除以8,商為1,餘數為:12-8*1=4。
繼續,用商1除以8,商為0,餘數為:1-8*0=1。
直到商為0,結束。
先算出來的餘數作為八進位數的低位,後算出來的餘數作為八進位數的高位,即十進位數100轉換為八進位數為 144,所以是逆向取餘。
3)十進位整數轉換為十六進位整數的方法為:除16逆向取餘。
首先,十進位整數100除以16,商為6,餘數為:100-16*6=4。
繼續,用商6除以16,商為0,餘數為:6-16*0=6。
直到商為0,結束。
先算出來的餘數作為十六進位數的低位,後算出來的餘數作為十六進位數的高位,即十進位數100轉換為十六進位數為64,所以是逆向取餘。