仅使用位逻辑查找二进制中两个整数的最大值

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),但我必须忽略这一点......有什么想法吗?

Nap*_*lux 0

我将通过向二进制 AND 的第二个运算符添加一个数字来迭代这两个数字(我们称它们为ab ),直到其中一个数字变为 0...

如果其中一个数字为 0 而另一个数字 > 0,则您将获得两者中的最大值...

第一个循环:

a&1 b&1

第二个循环:

a & 10 b & 10

第三个循环:

a&100 b&100

等等...

要检查操作后其中一个数字是否等于 0,您可以(给定 n,已知数字的长度)在最高有效的 n+1 位置用 n 乘以 0 加 1 的数字创建一个 and 。 ..

我的 2 美分(也许是错的):)