新浪博客

补码的加减法运算

2016-04-16 00:48阅读:
补码的加法运算法则如下:

该式表明,两个有符号数相加的补码可以通过先分别对两个数求补码,然后相加得到。在采用补码形式表示时,进行加法运算时可以把符号位和数值位一起进行运算(若符号位有进位,则溢出不管),结果为两数之和的补码形式。
如要求两个十进制数:35+18的补码(假设字长为8)。根据上面的补码加法运算法则可以得知,只需分别求35和18这两个数的补码,然后相加即可。又因这两个数都是正数,所以它们的补码与原码一样。这样一来,这道题实际上也就是求35和18这两个十进制数的原码和。35的原码为0 0100011(注意:最高位为符号位),18的补码为0 0010010。所以35+18的补码就等于(0 0100011)B+(0 0010010)B=(00110101)B,如图1-18a所示。如果转换成十进制就等于53,结果正确。如果相加后有超过字长的位溢出,则直接丢弃。
同理,如果要求两个十进制数:35+(-18)和的补码也是直接求35和-18的补码和。35的补码与其原码一样,前面已计算出,为0 0100011;而后面那
个“-18”因为是负数,所以不能直接从它的原码得到补码。需要先求-18的原码1 0010010,然后对其除符号位外的其他各位取反,得到其反码(为1 1101101),最后再在其末位(最低位)加1,最终得到其补码为1 1101110。
这样一来,“35-18”的补码就是(00100011)B+ (11101110)B,结果为00010001,如图1-18b所示。这里要注意,两个补码相加后产生了第9位(为1)的溢出,直接丢弃,所以结果就是(00010001)B。如果转换成十进制的话就等于17,结果正确。

3.补码的减法运算
补码的减法运算法则如下:

该公式表明,求两个机器数的差值(如[X-Y]补)的补码,可以通过求被减数的补码(如[X]补)与减数的负值的补码([-Y]补)的和得到。
[-Y]补是对减数进行求负操作,求负的规则是全部位(含符号位)取反后再加1(实际上也是分别对符号位和真值位进行求反,因为正数与负数的符号也正好相反)。例如:已知[15]补= 00001111,则[-15]补=11110000+1=11110001。
现在假设X=+35,Y =+18,要求[X-Y]补(字长为8)。

我的更多文章

下载客户端阅读体验更佳

APP专享