进制的本质
在我看来,进制是一种统计数量的方式,表示数量的符号是有限的,当表示一位的符号不足时,便需要向高一位进一,如此反复,便可以统计无穷无尽的数
走出十进制的固性思维
十进制的本质是逢十进一,就是当0-9十个符号用完后,在高一位用新的符号1表示,而不是想当然的4+6=10。
进制举例
二进制,从0开始,当数量为一时,记为1。当数量为2时,0和1两个符号已经用完,2这个数量已经无法表示,于是需要向高一位进一,表示低一位有两个符号,记为10。
十六进制,从0开始,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f共有十六一1个符号,所以可以表示15个数,当需要表示16时,需要向高一位进一,表示为10。
由此,便可以类推各种进制。
当然,这里的符号可以任意表示,只不过由0到9是国际标准,沿用这个标准是为了使每个人都可以看懂。
进制的运算
进制的运算最简便的方法是利用进制相应的算法表,这里运用的算法可以让你更深层次的理解进制运算,理解后可心算进制的简单运算。
进制的加法
十进制的加法:以6+7为例,六个数加七个数便是十三个数,十进制有十个符号。这十个符号向高位进一,高位有一个符号,十进制表示为1,低位便剩下三个符号,十进制表示为3,于是6+7=13.
十六进制的加法:以a+c为例,十个数加十二个数便是二十二个数,十六进制有十六个符号。这十六个符号向高位进一,高位有一个符号,十六进制表示为1,低位便剩下六个符号,十六进制表示为6,于是a+c=16.
其余进制以此类推。
进制的乘法
十进制的乘法:以6x7为例,六×七的结果,有四十二个数。四十二中有四个十,于是向十位进四个数,十进制表示为4,个位剩下两个数,十进制表示为2,于是6x7=42。
十六进制的乘法:同样以6x7为例,六×七的结果,有四十二个数。四十二中有两个十六,于是向十位进两个数,十六进制表示为2,个位剩下十个数,十六进制表示为a,于是6×7=2a。
其余进制以此类推。
进制的减法和除法
介绍了加法和乘法后,减法和除法就变得很简单,这里对减法只介绍运算。
十进制的减法:以21-2为例,21的低位减2的低位,1<2, 向高位借一,低位11-2=9,高位2-1-0=1,结果为19。
十六进制的减法:以21-2为例,21的低位减2的低位,1<2, 向高位借一,低位11-2=f,高位2-1-0=1,结果为1f。
其余进制以此类推。
由于除法应用较少,这里不做介绍。
利用算法表计算
进制的算法表的实质就是在进制一位中的运算,这里以十六进制的乘法表举例。
十六进制的算法表
* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f |
2 | 2 | 4 | 6 | 8 | a | c | e | 10 | 12 | 14 | 16 | 18 | 1a | 1c | |
3 | 3 | 6 | 9 | c | f | 12 | 15 | 18 | 1b | 1e | 21 | 24 | 27 | ||
4 | 4 | 8 | c | 10 | 14 | 18 | 1c | 20 | 24 | 28 | 2c | 30 | |||
5 | 5 | a | f | 14 | 19 | 1e | 23 | 28 | 2d | 32 | 37 | ||||
6 | 6 | c | 12 | 18 | 1e | 24 | 2a | 30 | 36 | 3c | |||||
7 | 7 | e | 15 | 1c | 23 | 2a | 31 | 38 | 3f | ||||||
8 | 8 | 10 | 18 | 20 | 28 | 30 | 38 | 40 | |||||||
9 | 9 | 12 | 1b | 24 | 2d | 36 | 3f | ||||||||
a | a | 14 | 1e | 28 | 32 | 3c | |||||||||
b | b | 16 | 21 | 2c | 37 | ||||||||||
c | c | 18 | 24 | 30 | |||||||||||
d | d | 1a | 27 | ||||||||||||
e | e | 1c | |||||||||||||
f | f |
在这里计算十六进制的15xa,低位5xa查表得32,高位1xa查表得a,a0+32=d2.
得15xa=d2。
汇编语言进阶
为什么要学习进制
寄存器、内存中每一个位都是用二进制表示,都有自己的含义。学习二进制是学习汇编的基础,理解了进制就可以更深层次地理解汇编。
三十二位的表示
由于计算机底层用到的二进制很长,为方便观看、转化和计算,一般用十六进制数表示。
二进制 | 0000 | 0010 | 0100 | 0110 | 1000 | 1010 | 1100 | 1110 |
---|---|---|---|---|---|---|---|---|
十六进制 | 0 | 2 | 4 | 6 | 8 | a | c | e |
对比可以看出,二进制的三十二位数据00000010010001101000101011001110对应的十六进制数据02468ace仅仅只有八位,观看、转化和计算得到了极大的方便。
本文中汉字均表示十进制数 ↩︎