我们都知道计算机底层是以二进制补码来进行数据存储处理的,如果涉及到底层开发,这等基础中的基础基本是必知的,即便现在已经有了计算器可以快速帮助我们转换,下面我们来梳理下常见的四种(二进制、十进制、十六进制、八进制)各进制之间的互相转换方法,手工计算实现,而不完全依赖于现代计算器。
进制表示方法
十进制(Dec) | 二进制(Bin) | 八进制(Oct) | 十六进制(Hex) |
---|---|---|---|
0 | 0 | 0 | 0x00 |
1 | 1 | 1 | 0x01 |
2 | 10 | 2 | 0x02 |
3 | 11 | 3 | 0x03 |
4 | 100 | 4 | 0x04 |
5 | 101 | 5 | 0x05 |
6 | 110 | 6 | 0x06 |
7 | 111 | 7 | 0x07 |
8 | 1000 | 10 | 0x08 |
9 | 1001 | 11 | 0x09 |
10 | 1010 | 12 | 0x0A |
11 | 1011 | 13 | 0x0B |
12 | 1100 | 14 | 0x0C |
13 | 1101 | 15 | 0x0D |
14 | 1110 | 16 | 0x0E |
15 | 1111 | 17 | 0x0F |
16 | 10000 | 20 | 0x10 |
十进制:逢十进一,也就是我们日常生活中,数学应用中的数制;
二进制:逢二进一,通常以一个字节(Byte)八个位(bit),左边可以补0对齐,只有0和1;
八进制:逢八进一,通常为了与十进制数不会混淆,前缀加个0来区分;
十六进制:逢十六进一,数字表示范围在0~9,A到F,通常前缀为0x,0X两种。
如下几种进制之间转换,可以有更好的方法,但用最简单的方法,也是最容易理解的方法,可以做参考。
- 十进制转换(二、八、十六进制)
- 二、八、十六进制转换(十进制)
- 二进制转换(八、十六进制)
- 八、十六进制转换(二进制)
- 八进制和十六进制互相转换
十进制转换(二、八、十六进制)
十进制转二进制:
这个是最常用的转换之一,将需要转换的数除以2,一直到商为0,再将余数反序取出,就是转换后的对应二进制数。
以上是十进制整数转二进制,但是十进制还有小数,虽然用的不多;十进制的小数转换成二进制:小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化后的结果。
十进制转八进制:
将需要转换的数除以8,一直到商为0,(八进制的余数范围0~7,最大只能是7)再将余数反序取出,就是转换后的对应八进制数。
十进制转十六进制:
将需要转换的数除以16,一直到商为0,(十六进制的余数范围0至9,a至f,最大只能是字母f)再将余数反序取出,就是转换后的对应十六进制数。
二、八、十六进制转换(十进制)
二进制转十进制:
用权值法,从右往左,从低往高每个位上的数值乘以2的0次方、第二位乘2的1次方、第三位乘2的2次方,以此类推直到把所有数乘完,(0的任何次方等于0,任何数的0次方等于1)最后所得的整数便是转换后的十进制数。
1100 0011 = 1*2^7 + 1*2^6 + 1*2^1 + 1*2^0
= 128+64+2+1
= 195
八进制转十进制:
用权值法,从右往左,从低往高每个位上的数值乘以8的0次方、第二位乘8的1次方、第三位乘8的2次方,以此类推直到把所有数乘完,(0的任何次方等于0,任何数的0次方等于1)最后所得的整数便是转换后的十进制数。
0123 = 1*8^2 + 2*8^1 + 3*8^0
= 64+16+3
= 83
十六进制转十进制:
用权值法,从右往左,从低往高每个位上的数值乘以16的0次方、第二位乘16的1次方、第三位乘16的2次方,以此类推直到把所有数乘完,(0的任何次方等于0,任何数的0次方等于1)最后所得的整数便是转换后的十进制数。
0xab = 10*16^1 + 11*16^0
= 160+11
= 171
因为十六进制中,a的数值等同10,以此类推,
0~f
16个字符。
二进制转换(八、十六进制)
二进制转八进制:
将二进制数从右往左,每三位二进制数组成一个八进制数,若最后高位(左边)不够三位,那么补0成三位的一个八进制数。这个可以对照进制表,方便快捷,但是一般八进制很容易记忆,八进制最大7
对应的二进制是111
,口算即可秒推算出对应的数制。
二进制转十六进制:
将二进制从右往左每四位二进制数组成一个十六进制数,若最后高位(左边)不够四位,那么补0成四位的一个十六进制数。这个也可以对照进制表来推算,十六进制最大0xf
对应的二进制是1111
。
八、十六进制转换(二进制)
八进制转二进制:
从右往左,每一位八进制数组成3位二进制数,对应的二进制数只可以在最左边补0对齐。
十六进制转二进制:
从右往左,每一十六进制数组成4位二进制数,对应的二进制数只可以在最左边补0对齐。
八进制和十六进制互相转换
八进制转十六进制:
可以先把八进制转换成二进制,再利用二进制转换成十六进制。
十六进制转八进制:
先把十六进制转换成二进制,再通过二进制转换成八进制。
总结:
关于进制转换其实还是那句话,可以用计算器转换,但是这些转换方法必须的会,底层开发,逆向分析等,你甚至可以采用自己的进制加密解密,常见的进制转换一般多为十进制、二进制、十六进制之间的转换,日常开发中简单数值小的数可以直接口算,数值过大的话还是直接用计算器转换吧,方便快捷,省时准确,滑稽树上滑稽果,滑稽树下你和我。