繁体   English   中英

按位运算符:仅使用 & 和 ~ 来获得 ^

[英]Bitwise Operators: Using only & and ~ to get ^

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

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

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

XOR 运算符实际上可以写为这两者的组合,我将把它分为两步:

A 与非 B = 非(A 与 B)

A XOR B = (A NAND (A NAND B)) NAND (B NAND (A NAND B))

就像之前在数学上描述的那样:

https://math.stackexchange.com/questions/38473/is-xor-a-combination-of-and-and-not-operators

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

接下来看看能不能找到表达方式| 纯粹就&~

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

祝你好运!

您可以尝试为XORAND 、 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 表述为:

(ab)不是当 (ab)

在布尔代数中没有but所以它变成了and导致了这个:

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

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

~(~a & ~b)

给出的答案是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM