使用ALU操作员的一个位置右桶换档?

时间:2009-10-12 04:45:16

标签: operators bit-shift bitwise-operators

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

Example:

input:  00110101
output: 10011010

我已经能够通过仅添加8位二进制值来实现左移,因为左移相当于乘以2.但是,我想不出为右移这样做的方法。

到目前为止我唯一能提出的方法就是只进行7次左转换。这是唯一的方法吗?

1 个答案:

答案 0 :(得分: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仅为A + (-B) A + ((B XOR 11111111) +1)。因此,如果有使用SUB的解决方案,则可以使用ADD和XOR将其重写为解决方案。如我们所示,那些运营商是不够的。因此,集{ADD, OR, XOR, NOT, ADD, SUB}也不够。