【问题标题】:How can I create an if statement using logic gates?如何使用逻辑门创建 if 语句?
【发布时间】:2015-04-26 17:43:40
【问题描述】:

我目前正在研究一个基本的二进制乘法器,我们仅限于使用逻辑门 (AND/OR/NAND/NOR/XOR)。我正在尝试列出下面的语句,但无法弄清楚如果没有 if 将如何实现。

(x代表被乘数,y代表乘数)

if ((y & 1) != 0) product = add(product,x);

【问题讨论】:

  • 使用提供的逻辑门是什么意思?这里缺少 y 的变化吗?
  • 您需要更好地解释您所面临的限制。 (有一些方法可以不用“if”,但有点可笑。)
  • 对不起,我将重新表述问题的那一部分。这意味着使用 AND、OR、XOR、NAND、NOR。
  • 如果您有一个 N 位字,则构建 (N*2 - 1) 个 N 位“加法器”,其中“奇数”加法器的一个输入是 M1 字与相应的 M2 相与位,并且“偶数”加法器将“奇数”加法器的连续级加在一起。 (但实际上“偶数”加法器需要是可变宽度,最多 N*2 - 1。)
  • 在这种情况下,这个特定的代码在一个循环中,其他所有事情都完成了,但我试图重新表述这个特定的代码块,以便它不依赖 if 语句,因为那不是允许。这段代码本质上只是使用最右边的二进制数字并检查它是 1 还是 0 的部分。如果是 1,则将被乘数添加到产品中。如果没有,则结束循环。

标签: java algorithm binary logic


【解决方案1】:

在这种特殊情况下,

product += x & (-(y & 1));

会起作用,其中位旋转相当于将所有 xy 的个位进行 AND 运算,然后相加。

【讨论】:

    【解决方案2】:

    假设add 就像它的名字所暗示的那样,那么

    product = add(product,(y & 1) * x);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多