我被教授给的奖金卡住了好几天:
- 只使用~和&
- 假设机器使用二进制补码,32位整数表示
我尝试过许多不同的组合,也尝试过写出运算符^的逻辑,但一直没有成功。任何提示或帮助都将不胜感激!
XOR运算符实际上可以写成这两者的组合。我将把它分为两个步骤:
NAND B=NOT(A AND B(
A XOR B=(A NAND(A nandb((NAND
如前所述的数学:
https://math.stackexchange.com/questions/38473/is-xor-a-combination-of-and-and-not-operators
首先,假设您有可用的&
、|
和~
运算符。你能用这种方式实现^
吗?
接下来,看看是否可以找到一种方法来纯粹用&
和~
来表达|
。
最后,把这些想法结合起来。
祝你好运!
您可以尝试为XOR、AND和OR绘制真值表
a b a^b
0 0 0
0 1 1
1 0 1
1 1 0
a b a|b
0 0 0
0 1 1
1 0 1
1 1 1
a b a&b
0 0 0
0 1 0
1 0 0
1 1 1
接下来了解如何使用|
和&
来构建这个
a|b
给出了所有三个第一行的正确性,a&b
给出了另一行。如果我们否定它,它可以用来掩盖想要的线条!因此,我们可以将xor表述为:
当(a和b(时
布尔代数中没有而是,因此它变成了和,这导致了:
(a|b)&~(a&b)
编辑:指出我回答了错误的问题,使用德摩根定律来构建或
~(~a & ~b)
给出的答案是
~(~a&~b)&~(a&b)