进制及进制的转换

了解进制的概念及进制的转换是学习逆向的基础,因为计算机使用的进制是二进制,它又不同于我们现实生活中使用的十进制,因此我们必须学习不同的进制及进制之间的转换。

现实生活中的进制与计算机的二进制

我们在现实生活中会接触到多种多样的进制,通常见到的有十进制、十二进制和二十四进制等。下面分别对这几种进制进行举例说明。
十进制是每个人从上学就开始接触和学习的进制表示方法。所谓的十进制,就是逢十进一,最简单的例子就是9+1=10。这个无需过多解释。
十二进制也是我们日常生活中常见的表示方法。所谓的十二进制,就是逢十二进一,例如12个月为1年,13个月就是1年1个月。
二十四进制也是我们日常生活中常见的表示方法。所谓的二十四进制,就是逢二十四进一,例如24小时为1天,25小时就是1天1小时。
介绍了以上现实生活中的例子后,我们再来说说计算机中的二进制。根据前面各种进制的解释,我们可以想到,二进制就是逢二进一。这里举个不太恰当的例子,例如2斤就是1公斤。

在计算机中为什么使用二进制呢?简单说就是计算机用高电平和低电平来表示1和0最为方便和稳定,高电平被认为是l,低电平被认为是0,这就是所谓的二进制的来源。由于二进制在阅读上不方便,计算机又引入了十六进制来直观地表示二进制。所谓的十六进制,就是逢十六进一。
因此在计算机中,我们常见的数据表示方法有二进制、十进制和十六进制。

进制的定义

在学习小学数学的时候我们就学习了十进制,十进制一共有十个数字,从0一直到9,9再往后数一个的时候要产生进位,也就是逢十进一。总结十进制的定义则是,由0到9十个数字组成,并且逢十进一。
举一反一地来说,二进制的定义是,由0到1两个数字组成,逢二进一。十六进制的定义是由0到9十个数字和A到F六个字母组成,逢十六进一。
由此,我们衍生出N进制的定义是,由N个符号组成,逢N进一。
下表所列为这三种进制的数字表。

数制 基数 数字
二进制 2 0 1
十进制 10 1 2 3 4 5 6 7 8 9
十六进制 16 0 1 2 3 4 5 6 7 8 9 A B C D E F

进制的转换

在逆向当中,我们直接面对的通常是十六进制,而由于很多原因,我们需要将其当作十进制或二进制来查看,当然也有可能需要根据二进制转换成十六进制或十进制。所以,我们就需要掌握进制之间的转换。

二进制转十进制

二进制整数的每个位都是2的幂次方,最低位是2的0次方,最高为是2的(N-1)次方,我们通过一个例子进行说明。我们把二进制数10010011转换成十进制数,计算方式如下:
10010011=1×27+0×26+0×25+1×24+0×23+0×22+1×21+1×20=128+0+0+16+0+0+2+1=147

十六进制与二进制的转换

由于一个简单的数值用二进制表示需要很长的位数,这样对于阅读很不方便,因此汇编和调试器常用十六进制表示二进制。十六进制的每个位可以代表4个二进制位,因为2的4次方刚好是16。这样,在二进制与十六进制之间就产生了一个很好的对应关系,如下表。

二进制 十进制 十六进制 二进制 十进制 十六进制
0000 0 0 1000 8 8
0001 1 1 1001 9 9
0010 2 2 1010 10 A
0011 3 3 1011 11 B
0100 4 4 1100 12 C
0101 5 5 1101 13 D
0110 6 6 1110 14 E
0111 7 7 1111 15 F

根据此表,我们可以很快地把二进制和十六进制进行转换,把上例的二进制10010011转换成十六进制,转换过程如下:
第一步,把10010011从最低开始按每四位分为一组,不足四位前面补0,划分结果为1001 0011

第二步,把划分好的组进行查表,1001对应十六进制是9,0011对应的十六进制是3。那么,二进制10010011转换成十六进制后的值是93。

在逆向中常用的就是二进制与十进制的转换,或者是二进制与十六进制的转换,其他的转换方式可以自行查找资料进行学习。关于十六进制和二进制需要记住的重要一点就是。
一位十六进制数可以表示四位二进制数。

THE END