1. 程式人生 > >二進位制、八進位制、十進位制、十六進位制之間的相互轉換

二進位制、八進位制、十進位制、十六進位制之間的相互轉換

二進位制、八進位制、十進位制、十六進位制的定義就不再贅述了

二進位制 逢二進一; 八進位制 逢八進一 ;十進位制 逢十進一;十六進位制 逢十六進一;

首先是我們生活中常用的十進位制轉換其他進位制:

我們用除積倒取餘 法,就是說比如我們要轉二進位制 就用 十進位制除以2 取餘,一直到0,然後倒取餘就可以得到二進位制,八進位制就是把2換成8 ,以此類推。下面我們用例子說明

1 十進位制轉二進位制:

例 :  89

89 / 2 = 44 -------1

44 / 2 = 22 -------0

22 / 2 = 11 -------0

11 / 2 = 5 ---------1

5 / 2 = 2 -----------1

2 / 2 = 1 -----------0

1 / 2 = 0 -----------1

二進位制:1011001  (倒著取餘)

可以再程式碼中輸出驗證一下:System.out.println(0b1011001);(在 java1.7以上的版本   0b 表示二進位制)

這裡就不截圖,可以自己測試一下

再舉例 :103  

103 / 2 = 51  ----- 1

51 / 2 = 25 ---------1

25 /2 = 12 -----------1

12 / 2 = 6 ------------0

6 / 2 = 3 --------------0

3 / 2 = 1 --------------1

1 / 2 = 0 ---------------1

二進位制:1100111 

System.out.println(0b1100111 );  結果為 103;

2.十進位制轉八進位制

同樣用除積倒取餘,我們就還用 89為例吧;

89 / 8 = 11 -----1

11 / 8 = 1 -------3

1 / 8 = 0 ---------1

八進位制: 131

System.out.println(0131);  結果為 89;

109為例

109 / 8 = 13 ----- 5

13 / 8  = 1 ---------5

1 / 8    =  0 ---------1

八進位制: 155

System.out.println(0155);  結果為 109

轉為十六進位制同樣用此方法,只要把 2 或者8 換成16就可以了,這裡就不再舉例說明了。

下面我們說一下 8421碼的方法

我們寫一下 二進位制    11111111

我們來分開 :

1         1          1         1        1         1         1           1

從第一位來說:

2的7次方   =  128 

第二位 

2 的 6次方 = 64 

第三位

2 的5次方 = 32

第四位

2 的 四次方 = 16  

以此類推後面四位分別為  8   -----  4    ------  2     -----    1  

我們把值放到對應的二進位制

   1       1        1        1        1        1         1         1 

128     64       32      16      8         4        2          1

這就是8421,可以把這看成一個表,

我們來舉個例子

二進位制 :1100111(上例中十進位制103的二進位制)  轉成十進位制

 1       1        1        1        1        1         1         1 

128     64       32      16      8      4         2          1

            1         1         0       0       1       1          1

從這個表中我們可以得出 :

64*1 + 32 * 1 + 16 * 0 + 8*0 + 4*1 + 2*1 + 1*1 = 

64 + 32 + 0 + 0 + 4 + 2 + 1 = 103

現在我們舉例說明 十進位制通過8421轉二進位制

還以  103為例:

1       1        1        1        1        1         1         1

128     64       32      16      8      4         2          1

首先 103 < 128  所以第一位  =  0

103 > 64   所以第二位  =  1

(103 - 64)= 39 > 32 所以第三位 = 1

39 - 32 = 7 < 16  所以第四位 =  0

7  < 8 所以第五位  =  0

7 > 4 所以第六位  = 1

7-4 = 3 > 2 所以第七位 = 1 

3-2 = 1 = 1 所以第八位 = 1

二進位制: 01100111     可以在程式碼中輸出驗證一下;

接下來二進位制通過8421碼轉八進位制

二進位制轉八進位制 是三位一組  從後往前

1       1        1        1        1        1         1         1

128     64       32      16      8      4         2        1

還是用 103的二進位制舉例:

01    100     111 三位一組

拿第一組  111     對照8421碼

1    1     1   分別對應的是    4  +   2  +  1  = 7

1    0     0  分別對應的是   4 + 2*0 + 1 * 0 = 4

0   1         分別對應的是    2*0 + 1*1 = 1 

八進位制結果: 147   可以在程式碼中輸出驗證一下;

103的二進位制轉 十六進位制 

二進位制轉十六進位制是 四位一組 

 0110 0111  分成兩組

0   1   1   0   分別對應  8*0 +  4*1 + 2*1 + 1*0 = 6   

0   1    1   1  分別對應  8*0 + 4*1 + 2*1 + 1*1 = 7

十六進位制 :0X67

至於十六進位制轉二進位制 可以用除積倒取餘方法

用 0X67 舉例

67  拆分  6   和    7  ;

首先   7 / 2 = 3   ------1

3 / 2 =  1   --------1 

1 / 2  =  0 ----------1 

0 / 2 = 0 ---------- 0

得到的四位 就為  0  1  1  1   

再說  6  

6 / 2  = 3  ----  0

3 / 2 =  1 -------  1

1 / 2 =   0  --------  1

0 / 2 =  0 ------- 0

補一位0

得到的四位 就是     0110

組合起來的二進位制就是  :  01100111     =  103(十進位制)

八進位制(147) 轉二進位制 

一位變三位

拆分為    1    和   4 和  7

先從7開始

7 / 2 =  3  ------  1

3 / 2 =  1 ---------1 

1 / 2 = 0  ----------1

然後是4 

4 / 2  = 2 ----- 0

2 / 2 = 1 -------0

1 / 2  = 0 --------1

最後是 1 

1 / 2 = 0 ----- 1 

0 / 2 = 0 ------- 0

組合起來的二進位制就是  01 100 111

有些亂。剛開始寫,只要理解了除積倒取餘和8421碼,各進位制之間的轉換,你會發現,其實沒那麼難。