购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1.4 计算机中数的表示与运算

计算机中的数按数的性质分为:整数(无符号整数、有符号整数)和小数(定点数、浮点数);按有无符号分为:有符号数(正数、负数)和无符号数。

1.无符号数的表示

(1)无符号数的表示形式

无符号数中用来表示数的符号的数位称为符号位。无符号数没有符号位,数的所有数位D n -1 ~D 0 均为数值位。其表示形式为:

(2)无符号二进制数的表示范围

一个n位无符号二进制数X,它可以表示的数的范围为0≤X≤2 n -1。若结果超出了数的可表示范围,则会产出溢出,出错。

2.有符号数的表示

有符号数由符号位和数值位两部分组成,数学中的正、负号用符号“+”、“-”来表示,在计算机中规定:用“0”表示“+”,用“1”表示“-”。这样数的符号位在计算机中已经数码化了。符号位数码化后的数就称为机器数,原来的数称为机器数的真值。

计算机的有符号数或者说机器数有3种表示形式:原码、反码和补码。目前计算机中的数是采取补码表示的。

(1)原码

对于一个二进制数X,若最高数位用“0”表示“+”,用“1”表示“-”,其余各数位表示数值本身,则称为原码表示法,记为[X]

例1-6 】X=+1101011,Y=-1000011,求[X] ,[Y]

[X] =01101011,[Y] =11000011

值得注意的是,0在8位单片机中的两种原码形式为:[+0] =00000000B,[-0] =10000000B,所以数0的原码不唯一。

8位二进制原码可表示的范围为:-127~+127。

(2)反码

正数的反码表示与其原码相同,负数的反码是其原码的符号位不变、数值各位取反,记为[X]

例1-7 】X=+1101011,Y=-1000011,求[X] ,[Y]

[X] =01101011,[Y] =10111100

0在反码中有两种表示形式:

[+0] =00000000B,[-0] =11111111B

(3)补码

正数的原码、反码和补码相同,负数的补码其最高位为1,数值位等于反码数值位的低位加“1”。

例1-8 】X=+1101011,Y=-1000011,求[X] ,[Y]

[X] =01101011,[Y] =10111101

[+0] =00000000B,[-0] =00000000B

由此可见,不论是+0还是-0,0在补码中只有唯一的一种表示形式。

3.无符号数的运算

无符号数的运算主要是无符号数的加、减、乘、除运算与溢出。

(1)二进制数的加减运算

二进制加法运算,每一位遵循如下法则:

0+0=0,0+1=1,1+0=1,1+1=0(向高位有进位),逢二进一。

0-0=0,1-1=0,1-0=1,0-1=1(向高位有借位),借一为二。

(2)二进制数乘法运算

二进制乘法运算,每一位遵循如下法则:0×0=0,0×1=0,1×0=0,1×1=1。其特点是:当且仅当两个1相乘时结果为1,否则为0。二进制数乘法运算过程是若乘数位为1,则将被乘数加于中间结果中;若乘数为0,则加0于中间结果中。

例1-9 】乘数为1101B,被乘数为0101B,求乘积的值。

(3)二进制数除法运算

例1-10 】除数为101,被除数为011010,求商的值。

二进制数除法商的过程和十进制数有些类似,首先将除数和被除数的高 n 位进行比较,若除数小于被除数,则商为1,然后从被除数中减去除数,得到部分余数;否则商为0。将除数和新的部分余数进行比较,直至被除数所有的位数都处理完毕为止,最后得到商和余数。

4.二进制数的逻辑运算

计算机处理数据时常常要用到逻辑运算,逻辑运算由专门的逻辑电路完成。

(1)逻辑与运算

逻辑与运算常用算符“∧”表示,逻辑与运算的运算法则为:0∧1=1∧0=0,0∧0=0,1∧1=1。逻辑与运算法则可概括为“只有对应的两个二进位均为1时,结果位才为1,否则为0”。

所以,01110101B∧01001111B=01000101B。

(2)逻辑或运算

逻辑或运算常用算符“∨”表示,逻辑或的运算法则为:0∨1=1∨0=1,0∨0=0,1∨1=1。逻辑或运算法则可概括为“只要对应的两个二进位有一个为1时,结果位就为1”。

例如:求00110101B∨0000111B的值。

所以,00110101B∨00000111B=00110111B。

(3)逻辑非运算

逻辑非运算常采用算符“-”表示,运算法则为: =1。

例如:已知A=10101B,试求 的值。

(4)逻辑异或运算

逻辑异或运算常采用算符⊕表示,逻辑异或的运算法则为:0⊕1=1⊕0=1,0⊕0=1⊕1=0。逻辑异或运算可概括为“两对应的二进位不同时,结果为1,相同时为0”。

例如:已知A=10110110B,B=11110000B,试求A⊕B的值。

5.有符号数的运算

原码表示的数虽然比较简单、直观,但由于计算机中的运算电路非常复杂,尤其是符号位需要单独处理。补码虽不易识别,但运算方便,特别在加减运算中更是这样。当所有参加运算的带符号数都用补码表示后,计算机对它运算后得到的结果必然也是补码,符号位则无须单独处理。

(1)补码的加、减法运算

补码加、减法运算的通式为:

[A+B] =[A] +[B]

[A-B] =[A] -[B]

即两数之和的补码等于两数补码之和,两数之差的补码等于两数补码之差。设机器数字长为 n ,则参与运算的数值的模为2 n 。A、B、A+B和A-B必须都在-2 n ~2 n -1 -1范围内,否则机器便会产生溢出错误。在运算过程中,运算位和数值位要一起参加运算,符号位的进位位略去不计。

例1-11 】已知A=+19,B=10,C=-7。试求[A+B] 、[A-B] 、[A+C]

解:[A] =00010011B,[B] =00001010B,[-B] =11110110B,[C] =11111001B。

1)[A+B] =[A] +[B] =00010011B+00001010B=00011101B;

2)[A-B] =[A] +[-B] =00010011B+11110110B=00001001B(符号位的进位位略去不计);

3)[A+C] =[A] +[C] =00010011B+11111001B=00001100B(符号位的进位位略去不计)。

上述运算表明:补码运算的结果和十进制运算的结果是完全相同的。补码加法可以将减法转化为加法来做;把加法和减法问题巧妙地统一起来,从而实现了一个补码加法器在移位控制电路作用下完成加、减、乘、除的四则运算。

(2)乘法和除法运算

乘法运算包括符号运算和数值运算。两个同符号数相乘之积为正,两个异符号数相乘之积为负;数值运算是对两个数的绝对值相乘,它们可以被视为无符号数的乘法,无符号数的乘法运算在前面章节中已经做了介绍。

除法运算也包括符号运算和数值运算。两个同符号数相除商为正,两个异符号数相除商为负;数值运算是对两个数的绝对值相除,它们可以被视为无符号数的除法。

注意:在计算机中凡是有符号数一律用补码表示且符号位参与运算,其运算结果也用补码表示。若结果的符号位为0,则表示结果为正数,此时可以认为就是它的原码形式;若结果的符号位为1,则表示结果为负数,它是以补码形式表示的。若要用原码来表示该结果,还需要对结果求补(除符号位外取反加1,[[X] =[X] )。

(3)对补码运算结果正确性的判断

对8位机而言,如果运算结果超出-128~+127,则称为溢出(小于-128的运算结果称为下溢,大于+127称为上溢)。也就是说如果参加运算的两数或运算结果超出8位数所能表示的范围,则机器的运算就会出现溢出,运算结果就不正确。因此,补码运算的正确性主要体现在对补码运算结果的溢出判断上。

在MCS-51单片机中,补码运算结果中的符号位的进位位用C p 表示,用C s 表示补码运算过程中次高位向符号位的进位位。若加法过程中符号位无进位(C p =0)以及最高数值位有进位(C s =1),则操作结果产生正溢出;若加法过程中符号位有进位(C p =1)以及最高数值位无进位(C s =0),则操作结果产生负溢出。

用OV表示溢出标志位,判断补码运算是否溢出的逻辑表达式可描述为:

OV= C p ⊕C s

例1-12 】已知A=-127,B=10,C=-7,试求[A+B] 、[A+C] ,并分析溢出情况。

[A] =01111111B,[B] =00001010B,[C] =11111001B

[A+B] 算式为:

从上式可以看出,[A+B] 超出了8位二进制数能够表示的范围,无论符号C p 有无进位,都产生了溢出。运算结果C p =0,C s =1,利用OV= C p ⊕C s 可以判断出[A+B] 带符号数补码加法运算的结果产生了溢出,所以结果不正确。

[A+C] 算式为:

[A+C] 的运算结果是正确的,没有产生溢出,符号进位C p 属于正常的自动丢弃。运算结果C p =1,C s =1,根据式OV= C p ⊕C s 可以判断出[A+C] 带符号数补码加法运算的结果没有产生溢出,从而结果正确。

从上面两个例子可以看出,带符号数相加时,符号位所产生的进位C p 有自动丢弃和用来指示操作结果是否溢出的两种功能。 7sKoVADboJVUQa/S/Bstl408ObPXgzRFPcoRfyAquBsSx+t4klMLcc5VMPrUbMrt

点击中间区域
呼出菜单
上一章
目录
下一章
×