0

几天来,我一直被教授给的奖金困住了:

  • 仅使用 ~ 和 & 给出 x^y
  • 假设机器使用二进制补码,32 位整数表示。

我尝试了很多不同的组合,也尝试写出运算符^的逻辑,但一直没有成功。任何提示或帮助将不胜感激!

4

3 回答 3

3

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

于 2020-03-05T00:19:05.530 回答
3

首先,假设您有每个可用的&|~运算符。你^可以这样实现吗?

接下来,看看你能不能找到一种|纯粹用&and来表达的方法~

最后,将这些想法结合在一起。

祝你好运!

于 2020-03-05T00:19:16.657 回答
2

您可以尝试绘制XORANDOR的真值表

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 表述为:

(ab) 不是当 (ab)

布尔代数中没有but ,所以它变成了一个并且导致了这个:

(a|b)&~(a&b)

编辑: 指出我回答错了问题,使用德摩根定律来构建或

~(~a & ~b)

给出的答案是

~(~a&~b)&~(a&b)
于 2020-03-05T00:32:59.737 回答