这一章我们将讲述进制、进制运算,二进制的书写格式和转换,计算机中数据的宽度,有符号整数、无符号整数的编码规则,以及原码、反码和补码。这些内容都是我们在正式开始学习编程之前必须要掌握的内容。首先我们来看第一节进制。
2.1节 进制
本节内容:学习不同进制的书写及定义。
■为什么学习进制:为了尽快适应和熟悉计算机二进制的编码规则。
■进制的书写:要求熟练掌握二进制、八进制、十进制、十六进制等各种不同进制的书写,以及任意自定义进制的书写。
■N进制的定义:由0、1、2、3、4……N-1,N个符号组成,逢N进一。
留意日常生活中有哪些进制?1进制,7进制,2进制,16进制,10进制,60进制。读者可以自行比对一下这些进制的应用场景。
2.1.1 我们为什么要学习进制
我们在第一章中讲述的计算机的三个基本功能,其中最重要的功能就是进行算术逻辑运算。现代计算机是电子计算机,只能稳定输出高电平和低电平两种状态,所以计算机只认识二进制数0和1。因而,电子计算机只能使用0和1进行二进制的算术逻辑运算。
作为一个初学者,我们在日常生活中最熟悉的是十进制,日常学习生活中应用最多的也是十进制算术逻辑运算。所以使用计算机处理日常事务和计算时,需要将输入的十进制数转换为二进制数,计算机进行二进制算术逻辑运算后,再将二进制结果转换为十进制结果输出。
这需要我们每一位初学者尽快适应二进制数的表示方法和二进制数算术逻辑运算。其实这个过程并不复杂,当理解了“任何进制的算术逻辑运算本质上都是一样的——查数查表”之后,一定会豁然开朗。
动手实验1:WinHex演示
我们新建一个记事本文件123.txt。记事本文件的内容是可见字符“0123456789”,将文件另存为ANSI格式的.txt文本文件。使用WinHex工具软件打开123.txt,或者直接将文件拖入WinHex,将看到图2-1显示的内容:
图2-1 WinHex演示
提示
本书中的示例代码、练习代码、工具软件,可以在编程达人官方网站下载:滴水逆向联盟论坛 www.dtdebug.com。此外编程达人官方网站(www.bcdaren.com)还提供与本书配套的视频专辑。
2.1.2 进制的书写
动手实验2:进制的书写
1.十进制:使用十进制符号0~9书写0~100,共101个元素。
2.一进制:使用一进制符号0书写十进制的101个元素。
3.九进制:使用九进制符号0~8书写十进制的101个元素。
4.七进制:使用七进制符号0~6书写十进制的101个元素。
5.三进制:使用三进制符号0,1,2书写十进制的101个元素。
示例:十进制
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 …
示例:三进制
0 1 2
10 11 12
20 21 22
100 101 102
110 111 112
120 121 122
200 201 202
…
一进制、九进制和七进制不再示例,由读者独自完成。当我们完成上面不同进制的书写实验后,就会发现,看似很简单,但是稍有疏忽就容易犯错。
提示
为什么要书写这么多的数?
其一,尽快摆脱对十进制算术逻辑运算的惯性思维。
其二,养成良好的习惯。作为一个程序员需要随手准备纸和笔,用纸和笔进行严谨的逻辑思维训练,尽可能的杜绝细小的错误。不能过度自信,仅凭头脑中想当然的敷衍了事。
当我们书写不同进制的时候,都会遇到一个问题,就是符号不够用的时候就会发生进位。当然1进制除外。
思考
什么是进位?为什么需要进位?
进位的意思就是向前进一位。
我们书写十进制数0,1,2,3,4,5,6,7,8,9,到9的时候就会发现十进制的10个符号已经用完。在符号不够用的情况下,必须向前进一位,进到下一个符号1,同时由1位数变成了两位数。10,11,12,13,14,15,16,17,18,19,到个位上的尾数9,再向前进一位,下一个符号2开始计数。以此类推,十位上的数到9时,进位到百位开始计数。以此类推。
2.1.3 进制的定义
■定义
●十进制的定义:由十个符号组成,分别是0 1 2 3 4 5 6 7 8 9,逢十进一。
●二进制的定义:由两个符号组成,分别是0 和1,逢二进一。
●八进制的定义:由八个符号组成,分别是0 1 2 3 4 5 6 7,逢八进一。
●十六进制的定义:由十六个符号组成,分别是0 1 2 3 4 5 6 7 8 9 A B C D E F,逢十六进一。
●N进制的定义:由0、1、2、3、4……N-1,N个符号组成,逢N进一。
■计数符号
●阿拉伯数字:0 1 2 3 4 5 6 7 8 9 。
●罗马数字: Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ、Ⅶ、Ⅷ、Ⅸ(没有0)。
●中国数字:零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾。
目前世界通用的十进制计数符号是阿拉伯数字,先由印度人发明,传入阿拉伯后,再由阿拉伯人传入中国。十个计数符号中,最重要的就是符号0。中国人也是在阿拉伯数字传入后才有了0的概念。请务必要记住,在计算机中,是从0开始计数的。
动手实验3:自定义进制
十进制的定义:由十个符号组成,分别是0 1 3 2 8 7 6 9 4 5 逢十进一。
0 1 3 2 8 7 6 9 4 5
10 11 13 12 18 17 16 19 14 15
30 31 33 32 38 37 36 39 34 35
20 21 23 22 28 27 26 29 24 25
80 …
70 …
十进制的定义:由十个符号组成,分别是A S B L K 7 6 V 9 5 逢十进一。
A S B L K 7 6 V 9 5
SA SS SB SL SK S7 S6 SV S9 S5
BA BS BB BL BK B7 B6 BV B9 B5
LA LS LB LL LK L7 L6 LV L9 L5
KA …
7A …
请读者独立完成上述两个自定义十进制101个元素的书写。
练习
1、2+3=1 成立吗?请说明理由。
2、分别用2、5、7、9、16进制写100个数,从0开始。
3、假设自定义十进制符号为A S B L K 6 7 V 9 5,从0开始写100个数。
本文摘自编程达人系列教材《X86汇编语言基础教程》。