3

我想知道是否有一种仅使用 ALU 运算符(NOT、OR、AND、XOR、ADD、SUB)对 8 位二进制值执行右移的有效方法

Example:

input:  00110101
output: 10011010

我已经能够通过将 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 回答