二进制补码运算

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课题三二进制补码运算

下面我们主要介绍在原码与补码运算中应注意的问题。

在原码运算时,首先要把符号与数值分开。例如两数相加,先要判断两数的符号,如果同号,可以做加法,如果异号,实际要做减法,减后的差作为两数之和,和数的符号与绝对值较大的数的符号相同。两数相减也是一样,首先要判断两数符号,然后决定是相加还是相减,还要根据两数的大小与符号决定两数之差的符号。

如果是补码运算则不存在符号与数值分开的问题。在补码运算时,把符号位也看成数值,一起参加运算,而且加法运算就一定是相加,减法运算就一定是相减,因此在计算机中对带符号的数进行加减时,最好使用补码。

补码的运算规则是:X补+Y补=(X+Y)补

设有两个数x和y,x=-89,y=+18,用补码表示如下

x=10100111B (-89的补码)

y=00010010B (+18的补码)

若求x+y之和,可不用考虑两数的符号,直接相加,得出的和为x+y=11000111B(-71的补码),可见直接相加结果是正确的。

(列出算式)

若求x-y之差,也可以直接相减,即

x=101001l1B (-89的补码)

-y=00010010B (+18的补码)

x-y=10010101B (-107的补码)

可见直接相减结果也是正确的。

若求y-x之差,同样也用减法,即

y=00010010B (+18的补码)

-x=10100111B (-89的补码)

也就是说做减法时,不论两数符号如何,其相减结果不论是数值还是符号都是正确的。

在上述y-x算式中,最高位发生的进(借)位只是因为在字长为8位的计算机中,若运算结果并未超出补码的记数范围(-128~+127),这时的进(借)位被视为自然丢弃。计算机在运算中,这种自然丢弃并不影响结果的正确性。

但要注意,如果字长为8位的计算机,其计算结果超过8位补码所允许的表示范围(即超出-128~+127),则其进位称之为溢出。溢出和自然丢弃是两种不同的概念。判别属于哪一种,则要看计算结果第7位与第8位的进位情况,如果第7位和第8位同时产生进位,即所谓双进位,则这种进位属于允许的自然丢弃。如果只有第7位或者只有第8位产生进位,即只有单进位,则这种进位属于溢出,溢出表示其数值超出计算机字长所能表示的范围,运算结果必然是错误的,因而也是不允许的。

应当注意的是,溢出的概念主要是指带符号二进制数进行加减运算时可能产生的一种结果。对于无符号数,第8位不是符号位,只有第8位的进位才称为进位,而不采用溢出这个概念。

对于无符号数的运算还应注意一点,当两个无符号数相减时,不允许用小的数去减大的数,因为小减大它的差一定是负数,无符号数的前提是没有符号,显然也不允许有负数,如果这样做,减的结果也必然是错误的。

五、字符的编码

(一)ASCII码

(二)BCD码

BCD码也叫做十进制编码,有压缩和非压缩两种存储形式。压缩的BCD码是用半个字节存放一位十进制数,一个字节存放两位十进制数。

1.8421 BCD码

表1-5 常见BCD码编码表

2.余3码

余3码是无权码,它具有良好的代码校验性。这种编码转换成十进制数后,每个代码的值比相应的十进制数多3。见表1-5。例如,十进制数6,它对应的余3码是1001=9;十进制数7对应的余3码是1010=10;它们都比十进制数大3。因此,这种BCD编码形式称为余3码。

3.格雷码

格雷码也是一种无权的BCD编码形式,其特点是相邻两位的代码,仅有一个码位变化。这种编码抗干扰能力强,常用于计算机控制的机床的角编码器、轴位编码等。

(三)奇偶校验码

奇偶校验是一种常用的简单的校验方法,在计算机内常用作存储器读写校验、ASCII字符传送中的校验等。

奇偶校验码是在传送的代码上附加一个校验位,作为代码的比较校验。这样在接收方,先对信息代码按双方的校验规定求奇偶校验码,然后再与收到的附加校验位作比较,若相等则认为接收的代码是正确的,若不相等则认为接收的代码是错误的。

实际上,奇偶校验就是鉴别代码中有奇数个“1”,还是有偶数个“1”。例如,有效信息为 1011001,若采用偶校验码记为“0”的话,则有效代码为10110010;若采用奇校验码记为“1”的话,有效代码则为10110011。有效代码的最后的那个数位,就是奇偶校验位。当接受方收到这组代码后,便根据奇、偶校验的约定和有效代码中“1”的个数形成校验码,然后再与接收的校验位作比较。比较相等的话,说明接受的信息正确;反之,则认为出现了错误。

奇偶校验只能发现一位错,但不能确定出错的位置,对偶数个错位便无能为力了。但在实际应用中,一位出错的概率比多位出错的概率高,因此,奇偶校验码还是很实用的。另外,还有一些具有纠错能力的校验编码,如海明码、冗余循环校验码等。有兴趣的读者可阅读了解有关纠错码方面的书籍。

关于课本95页例3-2-1的详细分析,原题:试采用4位加法器实现1位余三码到1位8421BCD码的转换。

观察余三码和8421BCD码规律发现,相应的余三码和8421码所对应的二进制字符串转换为十进制数后相差三,因此可以采用相应十进制数码的余三码减去三得到该十进制数码所对应的8421BCD码,完成余三码到8421BCD的转换。如果用加法器进行实现,就得考虑采用反码或者补码,书中是用补码完成减三操作的。

根据补码的运算规则要把两个数都要变换成补码,符号位参与运算,进位自动丢弃,结果仍为补码。

余三码的补码为0E3E2E1E0前面的0是符号位指代正数,3的二进制为0011,其反码为1100,因此其补码为1100+1=1101,所以-3的补码为11101,第一个1是符号位,代表负数。

0E3 E2 E1 E0

+ 1 1 1 0 1

10 F3F2F1F0

由于是两个异号数相加,因此不存在溢出问题,红色的1是要自动舍弃的进位。结果为0 F3F2F1F0,首位的0是符号位指代正数,因此其源码仍为0 F3F2F1 F0,其

相关文档
最新文档