は、私はそれについてサイト上の記事を見て、私は答えを理解していなかった。チェック
質問:
数値が3で割り切れるかどうかを判断するコードを書く。関数への入力は1ビット、0または1であり、これまで受信した数値が3で割り切れる数値のバイナリ表現であれば1になる。ゼロ。
例:
input "0": (0) output 1 inputs "1,0,0": (4) output 0 inputs "1,1,0,0": (6) output 1
これは面接の質問に基づいています。私は論理ゲートの描画を頼みますが、これはスタックオーバーフローなので、私はどのコーディング言語も受け入れます。ハードウェア実装(verilogなど)のためのボーナスポイント。
パートa(簡単):最初の入力はMSBです。 パートb(少し硬い):最初の入力はLSBです。 パートc(難しい):(a)または(b)のうち、どちらが速く小さくなっていますか? (理論的にはBig-Oの意味ではなく、実際にはより速い/より小さい)。より遅い/大きいものをとり、より速い/小さいものと同じように速く/小さくする。
答え:LSBのための
状態テーブル:
S I S' O 0 0 0 1 0 1 1 0 1 0 2 0 1 1 0 1 2 0 1 0 2 1 2 0
説明:0は3で割り切れます。 MSB 0 < < 1 + 0 = 0繰り返し使用S =(S < < 1 + I)%3及びO = 1の場合のS == 0
状態テーブル:
S I S' O 0 0 0 1 0 1 2 0 1 0 1 0 1 1 0 1 2 0 2 0 2 1 1 0
説明:0は3で割り切れます。 0 = 1 + 0 = 0 S == 0の場合、S =(S >> 1 + I)%3、O = 1を使用して繰り返します。
S 'は上記とは異なりますが、同じ場合(00と11)についてはS 'が0であるためです。どちらの場合もOは同じなので、O_LSB = O_MSBなので、MSBをLSBと同じくらい小さくするには、どちらか最短のものを使用してください。
アドバイスをいただきありがとうございます。
これはコーディングサービスではありません。あなたが星に何かを見せたら、おそらくいくつかの身体が少しの助けを加えることができます。 – Ripi2
@ Ripi2笑私はあなたが質問と答えを与えたことを理解している投稿を読んでも答えが出た...私はちょうど答えを理解していなかったし、それを理解しようとしています。 – shmulikm