二進位制、八進位制、十進位制、十六進位制之間的相互轉換
二進位制、八進位制、十進位制、十六進位制的定義就不再贅述了
二進位制 逢二進一; 八進位制 逢八進一 ;十進位制 逢十進一;十六進位制 逢十六進一;
首先是我們生活中常用的十進位制轉換其他進位制:
我們用除積倒取餘 法,就是說比如我們要轉二進位制 就用 十進位制除以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碼,各進位制之間的轉換,你會發現,其實沒那麼難。