1

基本的に、2 つの符号なし 8 ビット 2 進数があり、どちらが大きいかを調べるためにブール論理を使用する必要があります。論理ゲートの使用...

明らかに、各ビットを分析して、どちらが大きいかを調べる必要がありますが、どうすればすべてをまとめることができますか?

x と y があり、x < y (x と y は 8 ビットの符号なし 2 進数) の場合に true を返したいとします。どうすればこれを行うことができますか?

どちらが最上位ビットかを調べようと思ったのですが、両方とも同じだったらどうでしょうか。

誰でもアイデアはありますか?

4

4 に答える 4

2

どちらが最上位ビットかを見つけることを考えましたが、両方が同じである場合はどうなりますか?

違いが生じるまで、「最上位ビット」から「最下位ビット」に進みます。最初のビットが「1」に設定されている番号が最大です。

これを実装するには、各数値に「シフトレジスタ」を使用し、SRの「出力」ビットにコンパレータを使用します。

于 2010-02-26T18:51:22.423 に答える
0

あなたは途中です。はい、最上位ビットから始めます。両方が同じである場合は、次のビットに移動します(右に移動し、最下位ビットに向かって移動します)。設定されている(そして他のビットが設定されていない)ビットを見つけた場合、それはより大きな数です。

于 2010-02-26T18:52:32.110 に答える
0

確かに、あなたは正しい軌道に乗っています。まず、最上位ビットを比較します。それらが等しくない場合は、いずれかの方法で結果をすでに出力できます。それらが等しい場合は、2番目に上位のビットを比較した結果を出力するだけです。最下位ビットまで続きます。ある意味での再帰。その結果、わずかに変化する最後のビットを除いて、ビットごとに同じゲート構成が繰り返されます(その後にビットがないため)。

于 2010-02-26T18:53:19.893 に答える
0

一方の上位ビットが「大きい」場合 (つまり、それが 1 で、もう一方が 0 の場合)、数値よりも大きい方です。

それらが同じである場合、次のビットで同じテストを実行します。

したがって、次の C ライクな疑似コードのようなものが必要になります (最上位ビットが 0 の位置にある配列にビットがあるふりをします)。

// true iff x > y
(x[0] == 1 && y[0] == 0) 
|| (
  (y[0] == x[0]) 
  && (the entire expression all over again, but with [n+1] instead of [n])
)

基本ケース (つまり、テストするビットがもうない場合) では、> または >= のどちらが必要かによって、false または true を使用します。

于 2010-02-26T18:59:56.493 に答える