加法运算(补码)、减法运算(补码)、乘法运算(原码、补码),补充:与、或、非、异或、加法运算(异或、与、或)

在加减乘除运算中,使用原码进行运算的电路实现太难,多采用补码来进行加减乘除。

补码:正数的补码与原码一样。负数的补码是原码符号位不变,数值位全部取反,再加1。

例如:108-108

原码

(最高位即最左一位是符号位。

正数的符号位:0。

负数的符号位:1。)

0 110 11001 110 1100

反码

(正数的反码:同原码。

负数的反码:原码符号位不变,数值位全部取反)

0 110 11001 001 0011

补码

(正数的补码:同原码。

负数的补码:反码+1)

0 110 11001 001 0100

(补码)加法运算

二进制逢2进1,符号位参与加法运算。

补码的加法运算结果仍是补码,需转为原码。(正数:原码=补码。负数:符号位不变,数值位全部取反,再+1)

加法运算可能溢出

正数与正数相加,可能溢出;负数与负数相加,可能溢出。

例如:8位二进制,其中1位符号位,数值最大127。108+30=138>127,溢出。

 

判断是否溢出

方法一:一位符号位。通过将结果的符号位与原来两个符号位比对(与或非)。

若判断结果为0,没有溢出;若结果为1,则溢出。

方法二:一位符号位。符号位进位Cs与数值位最高位进位C1比对(异或)。

 方法三:双符号位。结果的两个符号位比对(异或)。

注:实际存储时,只有一个符号位。运算时,复制一个符号位。

 如何解决溢出(位宽扩大,也有称为:符号扩展)

正数

原码、反码、补码一样,扩宽方式也一样。

 正整数:符号位与数值位中间扩宽,补0。正小数:数值位低位后面扩宽,补0。

负数

负整数:原码:符号位与数值位中间扩宽,补0。

               反码:符号位与数值位中间扩宽,补1。

               补码:符号位与数值位中间扩宽,补1。

负小数:原码:数值位低位后面扩宽,补0。

               反码:数值位低位后面扩宽,补1。

               补码:数值位低位后面扩宽,补0。

(补码)减法运算

A-B相当于A+(-B),转为加法运算。

既是加法运算,就可能溢出(例如:108-(-30)相当于108+30),判断溢出与解决上面已说明。

(原码)乘法运算

相当于多次加法运算。涉及:加法(原码)、逻辑右移、异或。

(原码)乘法运算的符号位:(异或)

符号位不参与运算。最终结果的符号位:被乘数和乘数的符号位异或。

(原码)乘法运算初始:

ACC(累加寄存器):0000 0000,

MQ(乘商寄存器):乘数绝对值,

X(通用寄存器):被乘数绝对值。

(原码)乘法运算过程:(加法、逻辑右移)

第一步、MQ(乘商寄存器)的低位若为1,ACC(累加寄存器)中的值加上X(通用寄存器)中的值;若MQ的低位为0,ACC中的值加上0。

第二步、ACC中的值和MQ中的值一起逻辑右移(低位舍弃,高位补0)。

第三步、重复第一步、第二步。

第四步、修正符号位(ACC中)。

(原码)乘法运算最终结果:

ACC(符号位,乘积的高位),MQ(乘积的低位)。

 

(补码)乘法运算

相当于多次加法运算。涉及:加法(补码)、算术右移。

ACC和X中使用双符号。MQ中低位后面有一位辅助位。

(补码)乘法运算的符号位:

被乘数和乘数的符号位参与运算。且双符号位(存储时是1位符号位,运算时复制符号位)。

(补码)乘法运算初始:

ACC(累加寄存器):00 000 0000,

MQ(乘商寄存器):乘数补码,低位后面有一位辅助位0,

X(通用寄存器):被乘数补码,双符号。

(补码)乘法运算过程:(加法-补码、算术右移)

第一步、MQ(乘商寄存器)的辅助位减数值位低位,若为1,ACC(累加寄存器)中的值加上被乘数的补码;若为0,ACC中的值加上0;若为-1,ACC中的值加上被乘数相反数的补码。

第二步、ACC中的值和MQ中的值一起算术右移(低位舍弃,符号位为0,高位补0,符号位为1,高位补1)。

第三步、重复第一步、第二步。

第四步、多做第一步的加法(符号位参与运算)。

(补码)乘法运算最终结果(仍是补码):

ACC(符号位,乘积的高位),MQ(乘积的低位)。

 

补充

0:假。1:真。

与运算

与运算中,都为1(真),结果才为1(真),其余情况结果均为0(假)。

与运算
条件1条件2结果
000
010
100
111
或运算

或运算中,都为0(假),结果才为0(假),其余情况结果均为1(真)。

或运算
条件1条件2结果
000
011
101
111
非运算

非运算中,相当于取反,为0(假)则结果为1(真),为1(真)则结果为0(假)。

非运算
条件结果
01
10
异或运算

异或运算中,相同,结果为0(假);不同,结果为1(真)。

可理解为:判断是否仅有一个为1(真)。

异或运算
条件1条件2结果 
000
011
101
110

异或运算(可用与、或、非实现)

 加法运算(异或、与、或)

本位和:两个本位跟低位进位的异或。可理解为:3者中偶数个1则结果为0,否则为1。

进位:两种情况满足一个即可。1、两个本位都为1则进位(即两个本位进行与运算结果为1)。2、两个本位只有一个1,且低位进位为1,则进位,(即两个本位异或运算结果为1,然后和低位进位进行与运算结果为1)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yannan20190313

感谢您的支持。祝好心情。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值