本帖最后由 搬砖的毛蛋 于 2020-9-13 20:17 编辑
在微机的硬件系统中,其逻辑运算单元只有加法器,并没有减法器电路。所以,需要在软件算法上实现减法的运算。
可以想到利用时钟模型的原理:
当时钟到达12点时,有个清零的过程,即时钟重新开始从0点开始计时。 假设此时刚好为6点,则减去0点和加上12点是一样的,都是6点钟。 同理,减去1点和加上11点是一样的,都是5点钟。 减去2点和加上10点是一样的,都是4点钟。 ………… 所以可以推出[X点-Y点]与[X点+(12-Y点)]表示的时钟点数是一样的,其中12定义为运算的模。
从上面时钟变换可以得到4位二进制数减法的运算规律:
数盘中,数字由时钟的0-12推广到(+0)~(-1),当递增到-1后,数据直接清零,其与相应表示的补码对应,二进制数据从0000加一递进到1111,当到达10000时,数据首位溢出,数据重新清零,所以此时运算的模为16,二进制数据也重新从0000开始计数。
(X-Y)与X+(16-Y)值相同, 1.计算结果值为负数,例如X=6,Y=7有 常规计算: (X-Y)=6-7=-1; 微机计算: 规定(16-Y)为-Y的补码,正数的补码就是本身。 所以有 X补+(-Y)补=0110+1001=1111=(-1)补 2.计算结果值为正数,例如X=7,Y=6有 常规计算: (X-Y)=7-6=1; 微机计算: X补+(-Y)补=0111+1010=10001,首位值溢出可以忽略,最终结果=0001=(1)补。
3.当计算结果不在-8~7的范围时,会产生溢出此时计算结果数据错误。
最后,微机里面所有的数都是以补码的形式保存的,所以最后得到的加法结果是需要进行一次补码运算,才能得到原有的值。
|