提问人:cinos 提问时间:3/5/2020 最后编辑:Simsoncinos 更新时间:1/30/2023 访问量:1145
按位运算符:仅使用 & 和 ~ 来获取 ^
Bitwise Operators: Using only & and ~ to get ^
问:
几天来,我一直被教授给的奖金困住了:
- 仅使用 ~ 和 & 给出 x^y
- 假设机器使用二进制补码,即整数的 32 位表示形式。
我尝试了许多不同的组合,也尝试写出运算符^的逻辑,但一直没有成功。任何提示或帮助将不胜感激!
答:
3赞
Aiyion.Prime
3/5/2020
#1
XOR 运算符实际上可以写成这两者的组合。我将分两步进行:
A NAND B = NOT(A 和 B)
A 异或 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
评论
0赞
Jerry Jeremiah
3/5/2020
这是很多操作!
1赞
Aiyion.Prime
3/5/2020
我很乐意在几天后,当他过了提交日期时,他会把它打下来。
1赞
chepner
3/5/2020
@JerryJeremiah 仅就NAND而言实现这一点的原因是,拥有大量一种门比拥有少量不同种类的门更便宜(在硬件上)。你不会用NAND来重写XOR,因为你正在尝试优化软件实现。
0赞
Jerry Jeremiah
3/5/2020
@chepner当然,但维基百科有一个四NAND门版本。我确实同意五门版本更习惯地实现了 xor 的“定义”,但它仍然有更多的门......
2赞
templatetypedef
3/5/2020
#2
首先,假设您有可用的每个 、 和 运算符。你能以这种方式实现吗?&
|
~
^
接下来,看看你是否能找到一种纯粹用 和 来表达的方法。|
&
~
最后,将这些想法结合在一起。
祝你好运!
评论
1赞
cinos
3/5/2020
有人已经发布了答案,但我喜欢你的风格,因为它让我通过自己校对来理解。我要试试这个,然后看看我是否能自己得到答案。谢谢!
3赞
chux - Reinstate Monica
3/5/2020
OP要求“任何提示或帮助将不胜感激!”,这篇文章回答了这个问题。
2赞
Simson
3/5/2020
#3
您可以尝试绘制 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
将前三行全部正确,另一行。如果我们否定它,它可以用来掩盖想要的线!因此,我们可以将 xor 表述为:a&b
(a 或 b)但当(a 和 b)时不行
在布尔代数中没有 but,所以它变成了一个 和 这导致了这个:
(a|b)&~(a&b)
编辑:指出我答错了问题,用德摩根定律来建立或
~(~a & ~b)
给出的答案是
~(~a&~b)&~(a&b)
评论
0赞
Simson
3/5/2020
阅读问题;-)
上一个:优化复杂逻辑条件
下一个:在真值表上填写 n 个输入值
评论