几天来,我一直被教授给的奖金困住了:
- 仅使用 ~ 和 & 给出 x^y
- 假设机器使用二进制补码,32 位整数表示。
我尝试了很多不同的组合,也尝试写出运算符^的逻辑,但一直没有成功。任何提示或帮助将不胜感激!
几天来,我一直被教授给的奖金困住了:
我尝试了很多不同的组合,也尝试写出运算符^的逻辑,但一直没有成功。任何提示或帮助将不胜感激!
XOR 运算符实际上可以写成这两者的组合,我将把它分为两个步骤:
A 与非 B = 非(A 和 B)
A XOR B = (A 与非 (A NAND B)) 与非 (B 与非 (A NAND B))
就像之前在数学上描述的那样:
https://math.stackexchange.com/questions/38473/is-xor-a-combination-of-and-and-not-operators
首先,假设您有每个可用的&
、|
和~
运算符。你^
可以这样实现吗?
接下来,看看你能不能找到一种|
纯粹用&
and来表达的方法~
。
最后,将这些想法结合在一起。
祝你好运!
您可以尝试绘制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)
布尔代数中没有but ,所以它变成了一个并且导致了这个:
(a|b)&~(a&b)
编辑: 指出我回答错了问题,使用德摩根定律来构建或
~(~a & ~b)
给出的答案是
~(~a&~b)&~(a&b)