これは少しトリッキーですが、私が思うに、タスクをこなせる人にとっては素晴らしい挑戦です。そして、以前に尋ねられたすべての質問を検索しましたが、必要なものが見つかりませんでした.
ここでの目的は、 2進数でnビットに書き込まれた2 つの整数が与えられた場合、各整数の n ビットに対して論理演算 (AND、OR、...) のみを使用して最大のものを見つけることです (最初の整数の場合、結果は 0 になります)。 integer が最大で、そうでない場合は 1 です)。最終的には、2*n ビットが張力の有無にかかわらずワイヤである電子回路を描画し、論理演算を実行する実際の電子部品にワイヤを接続できるようにすることを目的としています。
この問題について考え始めたのは、何が起こっても (つまり、n が何であれ)、2^n は 2^0 + ... + 2^(n-1) より大きい (数学的に言えば、簡単に思いつく) ということです。つまり、他の整数の対応するビットが 0 で、n と k の間の他のすべてのビット (k の左にあるすべてのビット) が同一の場合に、1 であるビット (たとえば、番号 k) を持つ整数が最大であることを意味します。例 :
A : 010(1)1011 は、B : 010(0)1111 よりも大きく、有効ビットは括弧内にあります。その左側のすべてのビットは同一であり、他のビットを気にする必要はありません。
したがって、ビットのすべてのペアに対して排他的論理和 (XOR) を実行できます。重要なビットは 1 を生成し、その XOR の結果を使用して A の対応するビット間で NAND を実行できるため、 A の k 番目のビットが 1 の場合は 0、B の k 番目のビットが 1 の場合は 1 です。それらは異なる場合があります(したがって、XORを実行すると1が返されます)が、それを無視する必要があります...何かアイデアはありますか?