进制也就是进位制,我们常用到的就是二进制、八进制、十进制、十六进制。
二进制:由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--------10009--------1001
A--------1010
B--------1011
C--------1100
D--------1101
E--------1110
F--------1111
例如9EF,则对应的二进制则为100111101111
十六进制转十进制
按权展开求和,类似八进制转十进制
ok,若有不对的地方,请各位指出改正,谢谢!