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