x86笔记-第 1 章 十六进制计数法
二、十、十六进制简化符号
“B” 是英语单词 Binary 的首字母, 表示 二进制
“D” 是英语单词 Decimal 的首字母, 表示 十进制
“H” 是英语单词 Hexadecimal 的首字母, 表示 十六进制
二进制与十进制的转换
-
二进制 → 十进制
比如一个二进制数 10110001,它的基数是 2,所以要这样来计算与它等值的十进制数:
10110001B=1×27+0×26+1×25+1×24+0×23+0×22+0×21+1×20=177D
-
十进制 → 二进制
为了将一个十进制数转换成二进制数,可以采用将它不停地除以二进制的基数 2,直到商为 0,然后将每一步得到的余数串起来即可。如图 1-2 所示,如果要将十进制数 26 转换成二进制数,那么可采用如下方法:
第 1 步,将 26 除以 2,商为 13,余数为 0;
第 2 步,用 13 除以 2,商为 6,余数为 1;
第 3 步,用 6 除以 2,商为 3,余数为 0;
第 4 步,用 3 除以 2,商为 1,余数为 1;
第 5 步,用 1 除以 2,商为 0,余数为 1,结束。
然后,从下往上,将每一步得到的余数串起来,从左往右书写,就是我们所要转换的二进制
数。
十进制与十六进制进制的转换
-
十六进制到十进制的转换
要把一个十六进制数转换成我们熟悉的十进制数,可以采用和前面一样的方法。只不过,计算各个数位的权时,幂的底数是 16。比如将十六进制数125 转换成十进制数的方法如下:
125H=1×162+2×161+5×160=293D
-
十进制到十六进制的转换
如图 1-3 所示,相应地,要把一个十进制数转换成十六进制数,则可以采取不停地除以 16并取其余数的策略。
第 1 次,将 293 除以 16,商为 18,余 5;
第 2 次,用 18 除以 16,商为 1,余 2;
第 3 次,再用 1 除以 16,商为 0,余 1,结束。
然后,从下往上,将每次的余数 1、2、5 列出来,得到 125,这就是所要的结果。
部分十、二和十六进制数对照表
十进制数 | 二进制数 | 十六进制数 | 十进制数 | 二进制数 | 十六进制数 | |
---|---|---|---|---|---|---|
0 | 0000 | 0 | 10 | 1010 | A | |
1 | 0001 | 1 | 11 | 1011 | B | |
2 | 0010 | 2 | 12 | 1100 | C | |
3 | 0011 | 3 | 13 | 1101 | D | |
4 | 0100 | 4 | 14 | 1110 | E | |
5 | 0101 | 5 | 15 | 1111 | F | |
6 | 0110 | 6 | 16 | 0001 | 0000 | |
7 | 0111 | 7 | 17 | 0001 | 0001 | |
8 | 1000 | 8 | 55 | 0011 | 0111 | |
9 | 1001 | 9 | 195 | 1100 | 0011 |
每一个二进制数在排版的时候,都经过了“艺术加工”,全都以 4 比特为一组的形式出现。不足 4 比特的,前面都额外加了“0”。再比如图 1-4 中的二进制数 1100 0011,它与等值的十六进制数 C3 也有着相同的对应关系。也就是说:
将一个二进制数从右往左,分成 4 比特为一组的形式,分别将每一组的值转换成十六进制数,就可以得到这个二进制数所对应的十六进制数。
资料参考
- 《x86 汇编语言:从实模式到保护模式》