C语言 位运算符:仅使用&和~获取^

gorkyyrv  于 2023-02-03  发布在  其他
关注(0)|答案(3)|浏览(142)

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

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

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

yftpprvb

yftpprvb1#

XOR运算符实际上可以写成这两者的组合,我将把它分为两个步骤:
A与非B =非(A和B)
A异或B =(A与非(A与非B))与非(B与非(A与非B))
如前所述的数学:
https://math.stackexchange.com/questions/38473/is-xor-a-combination-of-and-and-not-operators

nvbavucw

nvbavucw2#

首先,假设您可以使用&|~操作符,那么您能用这种方式实现^吗?
接下来,看看是否可以找到一种方法,将|纯粹地表示为&~
最后,把这些想法结合起来。
祝你好运!

nx7onnlm

nx7onnlm3#

您可以尝试绘制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给出另一行。如果我们取反它,它可以用来屏蔽想要的行!所以我们可以将异或表示为:
(aB),但不是,当(ab)
在布尔代数中没有 but,所以它变成了一个and,这导致了:

(a|b)&~(a&b)
  • 编辑:* 指出我回答了错误的问题,使用德摩根定律来构建或
~(~a & ~b)

给出的答案是

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

相关问题