3

ALU演算子(NOT、OR、AND、XOR、ADD、SUB)のみを使用して、8ビットのバイナリ値に対して右シフトを実行する効率的な方法があるかどうか疑問に思いました。

Example:

input:  00110101
output: 10011010

左シフトは2を掛けるのと同じなので、8ビットの2進値を加算するだけで左シフトを実装できました。しかし、右シフトでこれを行う方法は考えられません。

私がこれまでに思いついた唯一の方法は、7つの左バレルシフトを実行することです。これが唯一の方法ですか?

4

1 に答える 1

2

これがで実行できないことを確認するのは簡単{AND, OR, XOR, NOT}です。これらすべての演算子について、outbit[N]はinbit1[N]とinbit2[N]のみに依存します。ANDは、inbit1 [N] ..inbit1[0]およびinbit2[N]..inbit2[0]への依存関係を追加します。ただし、あなたの場合、inbit [N+1]への依存が必要です。したがって、解決策がある場合は、SUBを含める必要があります。

ただし、どちらかA - Bです。したがって、SUBを使用したソリューションがあった場合、代わりにADDとXORを使用したソリューションとして書き直すことができます。これまでに示したように、これらの演算子は不十分です。したがって、セットも不十分です。A + (-B)A + ((B XOR 11111111) +1){ADD, OR, XOR, NOT, ADD, SUB}

于 2009-10-12T09:11:21.543 に答える