進位也就是進位制,我們常用到的就是二進位、八進位、十進位、十六進位。
二進位:由0,1兩個自然數組成,運算規律就是逢二進一。
八進位:由0~7八個自然數組成,運算規律就是逢八進一。
十進位:由0~9十個自然數組成,運算規律就是逢十進一。
十六進位:有0~9個自然數和A~F六個大寫字母組成。其中6個大寫字母分別表示10、11、12、13、14、15。運算規律就是逢十六進一。
為了更好的區分各類進位,通常在編寫的時候用該進位來做結尾。
例如十進位數2012,那麼十六進位中可以寫成(7DC)16,八進位可以寫成(3734)8,二進位可以寫成(011111011100)2。
十進位轉為二進位
十進位轉二進位分為整數部分和小數部分
整數部分可以用除以2擷取餘數的方法。得到的餘數就是該位權上的數,得到的商又除以2,如此迴圈,直至商為0,最後從最後的餘數向前讀數。
例如十進位數2012
換算過程
2012 / 2 = 1006 餘 0
1006 / 2 = 503 餘 0
503 / 2 = 251 餘 1
251 / 2 = 125 餘 1
125 / 2 = 62 餘 1
64 / 2 = 31 餘 0
31 / 2 = 15 餘 ·1
15 / 2 = 7 餘 1
7 / 2 = 3 餘 1
3 / 2 = 1 餘 1
1 / 2 = 0 餘 1
商為0,計算完畢,最後從最後的餘數向前讀數,即11111011100
小數部分可以用小數部分乘以2,然後取整數,剩下的小數繼續乘以2,如此迴圈直至小數部分為0,如果小數部分都不為0,那麼就要根據要求,如果後面一位是0,那麼則取捨,如果是1,那麼則進位1,最後從前面得到的整數往後讀。
例如十進位0.86
換算過程
0.86 * 2 = 1.72 則整數為 1 小數為0.72
0.72 * 2 = 1.44 則整數為1 小數為0.44
0.44 * 2 = 0.88 則整數為0 小數為0.88
0.88 * 2 = 1.76 則整數為1 小數為0.76
0.76 * 2 = 1.52 則整數為1 小數為0.52
0.52 * 2 = 1.04 則整數是1 小數是0.04
0.04 * 2 = 0.08 則整數是0 小數是0.08
0.08 * 2 = 0.16 則整數是0 小數是0.16
0.16 * 2 = 0.32 則整數是0 小數是0.32
0.32 * 2 = 0.64 則整數是0 小數是0.64
…………
依次下去
最後結果為0.1101110000……
同理,十進位轉八進位、十六進位也是如此,只不過是除以8、16。
二進位轉八進位
三位二進位表示一位八進位。如2^3 = 8
二進位轉八進位可以以二進位的小數點為分界點,整數部分向左取以三位為一個單元,小數部分向右取以三位為一個單元,然後計算分別得到的三位,計算得到的結果就是一位八進位,小數點的位置不變。如果無法籌足三位,那麼整數部分則可以在最高位權(即整數的最左邊)添加0補足,小數點部分則在最右邊部分添0補足。
例如二進位 (11101001.100011)2
三位取一 整數部分 011 101 001 小數部分 100 011
0*2^2 + 1*2^1 + 1*2^0 = 3 1*2^2 + 0*2^1 + 1*2^0 = 5 0*2^2 + 0*2^1 + 1*2^0 = 1
所以整數部分為351
1*2^2 + 0*2^1 + 0*2^0 = 4 0*2^2 + 1*2^1 + 1*2^0 = 3
所以小數部分是43
最後八進位的結果是(351.43)8
二進位轉十進位
對於N進位來說,整數部分的第 i 位的位權為N^(i - 1),而小數部分第 j 位的位權則為N^(-j),其中 i 以1開始
可以按權展開求和
例如二進位(1011.01)2
橫向展開:1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 + 0*2^-1 + 1*2^-2 = 11.25
二進位轉十六進位
四位二進位表示一位十六進位,如2^4=16
方法和二進位轉八進位類似,區別的是十六進位是以四位為一個單元。
例二進位(11101001.100011)2
四位取一 整數部分 1110 1001 小數部分 1000 1100
最後得到的十六進位的結果是(E9.8C)16
八進位轉二進位
因為八進位是由0~7的數字組成,且一位八進位為三位二進位,所以可以把一位八進位拆成三位二進位
而二進位上位權對應的權值又是這樣
| 2^7 |
2^6 |
2^5 |
2^4 |
2^3 |
2^2 |
2^1 |
2^0 |
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
八進位二進位
0--------000
1--------001
2--------010
3--------011
4--------100
5--------101
6--------110
7--------111
例八進位25,得到的二進位為(10101)2
八進位434,得到的二進位為(100011100)2
八進位轉十進位
可以按權展開求和
例如八進位(1011.01)8
橫向展開:1*8^3 + 0*8^2 + 1*8^1 + 1*8^0 + 0*8^-1 + 1*8^-2 = 521.215625
八進位轉十六進位
一般不直接轉換,可以先轉換為二進位。然後在轉換為需要的進位
十六進位轉二進位
因為十六進位是由0~9的數字和A~F組成,且一位十六進位為四位位二進位,所以可以把一位十六進位拆成四位二進位
十六進位二進位
0--------0000
1--------0001
2--------0010
3--------0011
4--------0100
5--------0101
6--------0110
7--------0111
8--------1000
9--------1001
A--------1010
B--------1011
C--------1100
D--------1101
E--------1110
F--------1111
例如9EF,則對應的二進位則為100111101111
十六進位轉十進位
按權展開求和,類似八進位轉十進位
ok,若有不對的地方,請各位指出改正,謝謝!