【发布时间】: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