1.1.3 单片机数据处理基础
1.数制
数制是按进位原则进行计数的一种方法,即进位计数制。数制有两个要素:计数符号和进位原则。
(1)十进制数
1)计数符号:0~9;书写时用D作后缀(一般省略)。
2)进位原则:逢十进一。
(2)二进制数
1)计数符号:0、1;书写时用B作后缀。
2)进位原则:逢二进一。
(3)十六进制数
1)计数符号:0~9、A、B、C、D、E、F;书写时用H作后缀。
2)进位原则:逢十六进一。
2.数制之间的相互转换
常用数制之间的对应关系见表1-1。
表1-1 常用数制之间的对应关系
(1)二进制及其他进制转换为十进制数
二进制、八进制和十六进制转换为十进制的方法是:将二进制、八进制或十六进制写成按权展开式,然后各项相加,则得相应的十进制数,即
D=∑Ki Ni
其中,Ki为对应进制各位的数值;N为对应的进制;Ni表示对应位数的权值,i在小数点往前依次为0、1、2、…、n-1,在小数点往后依次为-1、-2、…、-n。
【例1-1】把二进制数10101.1011B转换成相应的十进制数。
解:10101.1011B=1×24+0×23+1×22+0×21+1×20+1×2-1+1×2-3+1×2-4
=21.6875D
(2)十进制数转换为二进制数
十进制数据转换为二进制数是将整数部分按“除2倒读取余”的原则进行转换;小数部分按“乘2顺读取整”的原则进行转换。
【例1-2】把十进制数15.625转换为对应的二进制数。
解:
所以十进制数15.625=1111.101B。
(3)二进制数与十六进制(八进制)数相互转换
由表1-1可见,每4位(3位)二进制数可以完整地表示1位十六进制(八进制)数。所以,二进制数转换成十六进制(八进制)数时,从小数点开始,分别向左、向右每4位(3位)二进制数划为一组,整数部分不足4位(3位)前面添0,小数部分不足4位(3位)后面添0,然后每一组直接写出对应的十六进制(八进制)数,小数点位置保持不变。
十六进制(八进制)数转换成二进制数时,只要按相反的方法,每位十六进制(八进制)数写出4位(3位)二进制数。
【例1-3】把二进制数1111000111.100101B转换为十六进制数和八进制数。
解:1111000111.100101B=0011 1100 0111.1001 0100B=3C7.94H
1111000111.100101B=001 111 000 111.100 101B=1707.45O
(4)十六进制(八进制)数和十进制数相互转换
可以用前面介绍的D=∑KiNi进行转换,但一般通过先转换成二进制,再转换成其他进制的方法比较简便。
3.二进制数的算术运算
(1)加法运算
加法规则:0+0=0;0+1=1;1+0=1;1+1=10。
【例1-4】求0111B与0110B之和。
解:
∴0111B+0110B=1101B
(2)减法运算
减法规则:0-0=0;1-0=1;1-1=0;0-1=1(借位)。
【例1-5】求1110B-0101B=?
解:
∴1110B-0101B=1001B
(3)乘法运算
在计算机系统中,都是将乘法作为连续的加法来执行。其中,自身相加的数为被乘数,相加的次数为乘数。
【例1-6】求1101B×11B=?
解:1101B×11B=1101B+1101B+1101B=100111B
(4)除法运算
除法可以归结为连续的减法,即从被除数中不断地减去除数,所减的次数是相除的商,而剩下的值则是相除的余数。
4.二进制数的逻辑运算
(1)逻辑与运算
运算规则:有0为0,全1为1,即0∧0=0;0∧1=0;1∧0=0;1∧1=1。
(2)逻辑或运算
运算规则:有1为1,全0为0,即0∨0=0;0∨1=1;1∨0=1;1∨1=1。
(3)逻辑异或运算
运算规则:相同为0,不同为1,即0⊕0=0;0⊕1=1;1⊕0=1;1⊕1=0。
(4)逻辑非运算
运算规则:取反,即0’=1;1’=0。
注意,逻辑运算都是按对应位的数据运算,不存在算术运算的进位或借位。
5.计算机中数的表示方法
在计算机中,为了运算的方便,对于带符号数,数的最高位用来表示正、负数。最高位为“0”表示正数,最高位为“1”表示负数,如图1-1所示。
图1-1 机器数的表示
一个带“+”“-”号的数为真值,数码化了的带符号数为机器数。
一个机器数的表示方法有原码、反码及补码三种。
1)原码:用最高位表示符号位,后面各位表示该数的绝对值。
【例1-7】(+69)原码=01000101B=45H
(-69)原码=11000101B=C5H
2)反码:正数的反码与原码相同;负数的反码是在其原码的基础上,保留符号位不变,数值位各位取反。
【例1-8】(+69)反码=01000101B=45H
(-69)反码=10111010B=BAH
3)补码:正数的补码与原码、反码相同;负数的补码是在其反码的基础上加1。
【例1-9】(+69)补码=0100 0101B=45H
(-69)补码=(-69)反码+1=BAH+1=BBH
6.补码的运算
补码的运算规则为[X+Y]补=[X]补+[Y]补;[X-Y]补=[X]补+[-Y]补。所以减法运算可以转换为加法运算,而乘法用连续加、除法用连续减,也都能转换成加法运算。这样,二进制数的加、减、乘、除都可以转换为加法运算,通过运算器中的累加器实现。
【例1-10】25-32=25+(-32),因为[25]补=00011001B,[-32]补=11100000B
所以
对结果求补得到原码为10000111B,即25-32=-7。
7.十进制数编码
十进制数是人们习惯使用的数制,计算机中提供了十进制数编码,就是用二进制编码表示十进制数。根据不同应用,有多种编码方案,如BCD码、余3码、2421码及格雷码等,其中BCD码是最常用的编码,它用4位二进制位按8、4、2、1的权值相加来表示一个十进制数,见表1-2。
表1-2 BCD码表
BCD码分为压缩BCD码和非压缩BCD码,压缩的BCD码用1字节表示2位BCD码(高4位、低4位各代表1个BCD码);非压缩BCD码用1字节表示1位BCD码(低4位表示BCD码,高4位填0)。
8.字符编码
计算机需要处理大量的字符数据,而这些字符在计算机中也是用二进制编码表示。这种编码常用的是美国标准信息交换码(American Standard Code for Information Interchanger,ASCII),共定义了128个字符,其中33个字符是控制字符,用来控制信息的传输和设备的操作,其他95个是可显示的字符。常用字符的ASCII码见表1-3。
表1-3 常用字符ASCII(十六进制)表