zoukankan      html  css  js  c++  java
  • 硬件03:二进制减法器

    在减法中没有进位,而有借位,这是一种完全不同的机制。

    要完成的减法器控制面板如下:

    当总开关向下的时候代表执行减法,开关代表数据,灯泡带结果,如果最左边的第9个灯泡发光代表结果是负数。

    消除借位

    借位很复杂,但是我们可以避免出现借位。

    以十进制为例,如计算253-176,可以将计算简化为:
    $$
    253+(999-176)+1-1000
    $$
    这样就不会产生任何的借位了。

    如果是减数大于被减数的情况,如176-253,可以将计算结果简化为:
    $$
    (999-253)+176-999
    $$
    这里的最后一步922-999本质上也没有出现借位,只是结果是负数而已。

    二进制的减法的技巧与十进制的相同。

    完成减法

    在简化计算方法中一个常见的运算是用全1的二进制数减去减数,结果相当于对减数每位都取反。取反可以简单的给每个位加上一个反向器来解决,但是新的机器要求既能做加法又能做减法,所以需要一个灵活切换的机制,下列电路可以实现:

    在这个电路中,取反的信号会被传递到每一个异或门中,然后输出。当取反的信号是0,输入是01100001,那么输出就不变,还是01100001,因为0和任何数异或结果都是那个数。如果取反的信号是1,那么输出则会被反置为10011110.

    这个电路可以被简化为如下符号,它被称为求补器:

    再进一步,就可以组成新的能做减法的机器:

    这个电路是由一个8位二进制加法器和一个异或门连接起来的,SUB信号代表加减法转换开关,当SUB为0时代表加法,为1代表减法。在减法中,首先通过求补电路将减数取反,而且进位输入1使得结果加1,如果加1后产生进位,此时说明A-B等于正数,不产生下溢。

    上面这个部件还不能表示结果是负数,只能在正数时出现正确结果,因为如果是负数的话,还需要在输出端再经过一次取反才行。

  • 相关阅读:
    搞破坏(手动滑稽),如何写出让同事无法维护的代码?
    我们公司是如何把项目中的2100个if-else彻底干掉的
    为什么阿里规定需在事务注解@Transactional中指定rollbackFor?
    算法导论 10.2-7
    算法导论 10.2-3
    算法导论 10.2-2
    算法导论 10.1-7
    算法导论 10.1-6
    算法导论 2.3-7
    算法导论 2.3-5 二分查找
  • 原文地址:https://www.cnblogs.com/yinyunmoyi/p/12724849.html
Copyright © 2011-2022 走看看