c语言 - 按位运算符:仅使用 & 和 ~ 得到 ^



我被教授给的奖金卡住了好几天:

  • 只使用~和&
  • 假设机器使用二进制补码,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

首先,假设您有可用的&|~运算符。你能用这种方式实现^吗?

接下来,看看是否可以找到一种方法来纯粹用&~来表达|

最后,把这些想法结合起来。

祝你好运!

您可以尝试为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(时

布尔代数中没有而是,因此它变成了,这导致了:

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

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

~(~a & ~b)

给出的答案是

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

相关内容

  • 没有找到相关文章

最新更新