Cha*_*les 5 binary boolean-logic integer max
这有点棘手,我认为这对于那些能够胜任这项任务的人来说是一个很好的挑战。我确实搜索了之前提出的所有问题,但找不到我想要的。
这里的目标是,给定2 个以二进制形式写入n位的整数,仅对每个整数的 n 位使用逻辑运算(AND、OR、...)来找到其中最大的一个(如果第一个整数的结果将为 0)整数为最大,否则为 1)。最终,我们的目标是能够绘制一个电子电路,其中 2*n 位将是有或没有张力的电线,并将电线插入到执行逻辑运算的实际电子组件中。
我开始思考这个问题,意识到无论发生什么(即无论 n 是什么),2^n 都大于 2^0 + ... + 2^(n-1) (从数学上来说,这很容易想到)。这意味着,当另一个整数中的相应位为 0 且 n 和 k 之间的所有其他位(k 左侧的所有位)相同时,无论哪个整数有一个位(例如数字 k)为 1,该位都是最大的。例子 :
A : 010(1)1011 大于 B : 010(0)1111 且有效位位于括号内。它左边的所有位都是相同的,我们不必关心其他位。
因此,可以对所有位对执行异或 (XOR) 操作:有效位将产生 1,然后我可以在 A 的相应位与 XOR 的结果之间执行 NAND,这样就会产生如果 A 的第 k 位是 1,则为 0;如果 B 的第 k 位为 1,则为 1。唯一的问题是……有效位右侧的位怎么样?它们可以不同(因此在执行 XOR 时也会产生 1),但我必须忽略这一点......有什么想法吗?
我将通过向二进制 AND 的第二个运算符添加一个数字来迭代这两个数字(我们称它们为a和b ),直到其中一个数字变为 0...
如果其中一个数字为 0 而另一个数字 > 0,则您将获得两者中的最大值...
第一个循环:
a&1 b&1
第二个循环:
a & 10 b & 10
第三个循环:
a&100 b&100
等等...
要检查操作后其中一个数字是否等于 0,您可以(给定 n,已知数字的长度)在最高有效的 n+1 位置用 n 乘以 0 加 1 的数字创建一个 and 。 ..
我的 2 美分(也许是错的):)
| 归档时间: |
|
| 查看次数: |
11700 次 |
| 最近记录: |