底层开发必知之四大进制转换

请注意,本文编写于 1557 天前,最后修改于 1281 天前,其中某些信息可能已经过时。

我们都知道计算机底层是以二进制补码来进行数据存储处理的,如果涉及到底层开发,这等基础中的基础基本是必知的,即便现在已经有了计算器可以快速帮助我们转换,下面我们来梳理下常见的四种(二进制、十进制、十六进制、八进制)各进制之间的互相转换方法,手工计算实现,而不完全依赖于现代计算器。

进制表示方法

十进制(Dec)二进制(Bin)八进制(Oct)十六进制(Hex)
0000x00
1110x01
21020x02
31130x03
410040x04
510150x05
611060x06
711170x07
81000100x08
91001110x09
101010120x0A
111011130x0B
121100140x0C
131101150x0D
141110160x0E
151111170x0F
1610000200x10

十进制:逢十进一,也就是我们日常生活中,数学应用中的数制;

二进制:逢二进一,通常以一个字节(Byte)八个位(bit),左边可以补0对齐,只有0和1;

八进制:逢八进一,通常为了与十进制数不会混淆,前缀加个0来区分;

十六进制:逢十六进一,数字表示范围在0~9,A到F,通常前缀为0x,0X两种。

如下几种进制之间转换,可以有更好的方法,但用最简单的方法,也是最容易理解的方法,可以做参考。

  1. 十进制转换(二、八、十六进制)
  2. 二、八、十六进制转换(十进制)
  3. 二进制转换(八、十六进制)
  4. 八、十六进制转换(二进制)
  5. 八进制和十六进制互相转换

十进制转换(二、八、十六进制)

十进制转二进制:

这个是最常用的转换之一,将需要转换的数除以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对齐。


八进制和十六进制互相转换

八进制转十六进制:

可以先把八进制转换成二进制,再利用二进制转换成十六进制。

十六进制转八进制:

先把十六进制转换成二进制,再通过二进制转换成八进制。

总结:

关于进制转换其实还是那句话,可以用计算器转换,但是这些转换方法必须的会,底层开发,逆向分析等,你甚至可以采用自己的进制加密解密,常见的进制转换一般多为十进制、二进制、十六进制之间的转换,日常开发中简单数值小的数可以直接口算,数值过大的话还是直接用计算器转换吧,方便快捷,省时准确,滑稽树上滑稽果,滑稽树下你和我

Comments

添加新评论