首页 > 解决方案 > 使用逻辑门的二进制减法

问题描述

我一直在尝试从逻辑电路图中重新创建一个二进制全减法器,但我似乎无法获得准确的输出。我已经用几种方法重写了它,并在没有循环的情况下运行它并以不同的方式表达逻辑。看一些例子,我真的看不出有什么问题。这个想法是获取 2 n 位数字作为输入并屏蔽每个位,然后执行减法逻辑。我有一个工作加法器,我可以通过反转第二个值来重用它,但我这样做是为了教育目的,让自己熟悉 ALU 的逻辑。

class Alu {
  constructor(b = 8) {
    this.bits = b;
  }
  sub(y, z) {
    let m = 1; //mask
    let d = 0; //diff
    let b = 0; //borrow
    let w = 10; //base
    for (let i = 0; i < this.bits; i++) {
      let yM = y & m;
      let zM = z & m;
      d |= b ^ (yM ^ zM);
      b = (~yM & zM) | (~yM & b) | (~zM & b);
      m <<= 1;
    }
    console.log(y.toString(w));
    console.log(z.toString(w));
    console.log(d.toString(w));
  }
}

以下是我正在使用的参考图片:

全减法器逻辑电路

4 位减法器

标签: javascriptbinarybit-manipulationcomputer-scienceboolean-logic

解决方案


推荐阅读