我想知道是否有一种仅使用 ALU 运算符(NOT、OR、AND、XOR、ADD、SUB)对 8 位二进制值执行右移的有效方法
Example:
input: 00110101
output: 10011010
我已经能够通过将 8 位二进制值与自身相加来实现左移,因为左移相当于乘以 2。但是,我想不出一种方法来实现右移。
到目前为止,我想出的唯一方法是只执行 7 次左桶移位。这是唯一的方法吗?
我想知道是否有一种仅使用 ALU 运算符(NOT、OR、AND、XOR、ADD、SUB)对 8 位二进制值执行右移的有效方法
Example:
input: 00110101
output: 10011010
我已经能够通过将 8 位二进制值与自身相加来实现左移,因为左移相当于乘以 2。但是,我想不出一种方法来实现右移。
到目前为止,我想出的唯一方法是只执行 7 次左桶移位。这是唯一的方法吗?
很容易看出这不能用{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}