首页 理论教育单片机多语言编程:数制与运算

单片机多语言编程:数制与运算

【摘要】:将一个二进制数转换成十进制数表示,只需按权展开做一次10进制运算即可以完成。将一个十进制数转换成二进制数表示,是数据转换中较复杂的工作。做乘、除运算时,其法则与十进制数也是相同的。它不同于数值运算。二进制数可以进行按位的逻辑运算,每位之间相互独立,位与位之间不存在进位和借位的关系。

1.十进制二进制十六进制

十进制(Decimal)有进位计数的累积和进位特征。十进制数由0,1,2,…,9共10个数码表示,并遵循“逢十进一”的进位计数规则。十进制的计数基数是10。例如

780=7×102+8×101+0×100上式称为按“权”展开式。各位数的权值为10的幂,即个位数的权为100,十位数的权为101,百位数的权为102等。

二进制(Binary)遵循十进制数的分析过程,我们同样可以确定,二进制数要由两个数码表示,即0和1,并遵循“逢二进一”的进位计数规则。二进制数的计数基数是2,各位的权值为2的幂。例如,1101B=1×23+1×22+0×21+1×20=13。

十六进制(Hexadecimal)十六进制数要由16个数码表示,即0,1,2,…,9,A,B,C,D,E,F,并遵循“逢十六进一”的进位计数规则。十六进制的计数基数是16。在十六进制中A表示值为10的数码,B表示值为11的数码,…,F表示值为15的数码。各位的权值为16的幂。例如,3ABH=3×162+A×161+B×160=3×256+10×16+11×1=939。

2.各种进制的转换

二进制数与十进制数的相互转换,按如下步骤进行:

二进制数转换成十进制数。将一个二进制数转换成十进制数表示,只需按权展开做一次10进制运算即可以完成。

【例1-10】 将二进制数11101010B转换成十进制数

11101010B=1×27+1×26+1×25+0×24+1×23+0×22+1×21+0×20

=128+64+32+8+2=234

十进制数转换成二进制数。将一个十进制数转换成二进制数表示,是数据转换中较复杂的工作。这里我们只涉及整数部分,转换方法是将十进制整数除以2取余数,直到商为0。

【例1-11】 将十进制数45转换成二进制数

转换过程为

978-7-111-47138-7-Chapter01-56.jpg

转换结果为

978-7-111-47138-7-Chapter01-57.jpg

由于我们的学习主要涉及8位二进制数的处理,若结果不够8位,要将已得的位数高两位补0,即45=00101101B,两种表示数值相同,为了阅读方便,统一用8位二进制数表示。

3.二进制数与十六进制数的相互转换

【例1-12】 将十六进制数3ACDH转换成二进制数

转换过程为

978-7-111-47138-7-Chapter01-58.jpg

转换结果为

3ACDH=0011101011001101B

二进制数转换为十六进制数。将二进制数转换为十六进制数,可以表述为以二进制数最低位为起点,向前每4位作为一组,若取到最高位时不足4位可补0代替,每一组4位二进制数即可写出对应的十六进制数,按由低到高位排列即得结果。

【例1-13】 将二进制数010101111011B转换为十六进制数

转换过程为

978-7-111-47138-7-Chapter01-59.jpg

转换结果为

010101111011B=57BH

4.二进制数的算术运算

对于二进制数的算术运算,像通常十进制数的算术运算一样,做加、减运算时,个位要对齐。做乘、除运算时,其法则与十进制数也是相同的。与十进制不同的是,在运算过程中始终要遵循“逢2进1”的运算规则。

(1)加法运算法则(见表1-2)

表1-2 加法运算法则

978-7-111-47138-7-Chapter01-60.jpg

【例1-14】 求00010011B+00100011B

运算过程为

978-7-111-47138-7-Chapter01-61.jpg

故00010011B+00100011B=00110110B

验算00010011B=16+2+1=19

00100011B=32+2+1=35 19+35=54

结果00110110B=32+16+4+2=54,正确

【例1-15】 求11111111B+00000001B

运算过程为

978-7-111-47138-7-Chapter01-62.jpg

由于只涉及8位二进制数,进位位无法显示

11111111B+00000001B=0进位位=1

验算11111111B=255

00000001B=1 255+1=256

结果100000000B=256进位位=1

(2)减法运算法则(见表1-3)

表1-3 减法运算法则

978-7-111-47138-7-Chapter01-63.jpg

【例1-16】 求00010110B-00001001B

运算过程为

978-7-111-47138-7-Chapter01-64.jpg

故00010110B-00001001B=00001101B

验算00010110B=32 00001001B=9 32-9=13

结果00001101B=13 正确

【例1-17】 求00000000B-00000001B(www.chuimin.cn)

运算过程为

978-7-111-47138-7-Chapter01-65.jpg

故 00000000B-00000001B=11111111B

验算00000000B=0 00000001B=1 0-1=-1

结果11111111B=-1 因为若x=11111111B

x+1=0,x=-1

(3)乘法运算法则(见表1-4)

表1-4 乘法运算法则

978-7-111-47138-7-Chapter01-66.jpg

【例1-18】 求00001101B×00000110B

运算过程为

978-7-111-47138-7-Chapter01-67.jpg

故 00001101B*00000110B=01001110B

验算00001101B=13

00000110B=6 13*6=78

结果01001110B=78 正确

(4)除法运算法则(见表1-5)

表1-5 除法运算法则

978-7-111-47138-7-Chapter01-68.jpg

【例1-19】 求00001101B÷00000110B

运算过程为

978-7-111-47138-7-Chapter01-69.jpg

故 00001101B/00000110B=10B=2

余数=0001B=1

验算00001101B=13

00000110B=6 13/6=2,余数=1

5.二进制数的逻辑运算

上面讲到,计算机中的数据是以二进制为基础的,只有“1”和“0”两个值,这是一种对应的逻辑值,而不能理解为数值。在生活中“真”和“假”,“对”和“错”都可以看作为逻辑值。如果“真”是1,“假”就是0,“高”是1,“低”就是0。对逻辑值,有一套特有的运算规则。它不同于数值运算。例如,对于逻辑值1+1=1。这在算术运算中是不成立的,但对逻辑值运算却是正确的。

二进制数可以进行按位的逻辑运算,每位之间相互独立,位与位之间不存在进位和借位的关系。

(1)逻辑与(AND)

逻辑与的运算法则与二进制乘法相类似。因此,与运算通常用“*”或“&”来表示,其运算法则见表1-6。

表1-6 逻辑与的运算法则

978-7-111-47138-7-Chapter01-70.jpg

由运算法则可知,逻辑与的意义是只有当参与运算的逻辑变量都为1时,与运算的结果才会为1。只要其中有一个为0,其结果就为0。

【例1-20】 逻辑与运算 10101111B&10011101B=10001101B

运算过程为

978-7-111-47138-7-Chapter01-71.jpg

(2)逻辑或(OR)

逻辑或的运算法则类似于二进制加法。因此,或运算通常用“+”或“|”表示,其运算法则见表1-7。

表1-7 逻辑或的运算法则

978-7-111-47138-7-Chapter01-72.jpg

由运算法则可知,逻辑或的意义是当参与运算的逻辑变量中有任意一个为1时,或运算的结果就为1。只有都为0时,其结果才为0。

【例1-21】 逻辑或运算 10101010B+01100110B=11101110

运算过程为

978-7-111-47138-7-Chapter01-73.jpg

(3)逻辑非(NOT)

逻辑非就是逻辑取反,用逻辑量再加一横线表示。例如,A的逻辑非即978-7-111-47138-7-Chapter01-74.jpg。逻辑非的运算法则见表1-8。

表1-8 逻辑非运算的法则

978-7-111-47138-7-Chapter01-75.jpg

【例1-22】 若A=10101100B,则978-7-111-47138-7-Chapter01-76.jpg

(4)逻辑异或(XOR)

异或运算可以通过基本逻辑运算实现。978-7-111-47138-7-Chapter01-77.jpg,用“⊕”表示,逻辑异或运算法则见表1-9。

表1-9 逻辑异或运算法则

978-7-111-47138-7-Chapter01-78.jpg

【例1-23】 逻辑异或 10101100B⊕01100110B=11001010B

运算过程为

978-7-111-47138-7-Chapter01-79.jpg

由运算法则可知,逻辑异或运算是只有在两个逻辑变量的值不同时,其结果才为1。否则结果为0。用异或运算的结果可以很容易地判断两个逻辑变量是否相同。

逻辑运算在数据处理过程中经常使用。例如,A是一个8位二进制数,若要得到A的低4位数,只要做逻辑运算“A*00001111B”,高4位被屏蔽,结果就是低4位数。