C 按位运算符:仅使用&;而且,为了得到,^
几天来,我一直被教授给我的奖金所困扰:C 按位运算符:仅使用&;而且,为了得到,^,c,bitwise-operators,boolean-algebra,C,Bitwise Operators,Boolean Algebra,几天来,我一直被教授给我的奖金所困扰: 仅使用~和给出x^y& 假设机器使用两个补码,32位整数表示 我尝试了许多不同的组合,也尝试了写出运算符^的逻辑,但一直没有成功。任何提示或帮助都将不胜感激 XOR运算符实际上可以写成这两个运算符的组合,我将分两个步骤进行说明: A NAND B=非(A和B) 异或B=(与非门(与非门B))与非门(与非门B(与非门B)) 就像前面关于数学的描述: 首先,假设您可以使用&、|和~操作符。你能用那种方式实现吗 接下来,看看你是否能找到一种方法来表达|纯粹的
- 仅使用~和给出x^y&
- 假设机器使用两个补码,32位整数表示
我尝试了许多不同的组合,也尝试了写出运算符^的逻辑,但一直没有成功。任何提示或帮助都将不胜感激 XOR运算符实际上可以写成这两个运算符的组合,我将分两个步骤进行说明: A NAND B=非(A和B) 异或B=(与非门(与非门B))与非门(与非门B(与非门B)) 就像前面关于数学的描述:
首先,假设您可以使用
&
、|
和~
操作符。你能用那种方式实现吗
接下来,看看你是否能找到一种方法来表达|
纯粹的&
和~
最后,将这些想法结合起来
祝你好运 您可以尝试为异或、和以及或绘制真值表
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表述为:
(a或b)但不时(a和b)
布尔代数中没有but,因此它变成了一个和,这导致:
(a|b)&~(a&b)
编辑:
指出我回答了一个错误的问题,使用DeMorgan法则来建造手术室
~(~a & ~b)
答案是
~(~a&~b)&~(a&b)
可以help@EdHeal我在前面的另一个问题上看到了这一点,但是我找不到XOR证明,我会再看一遍,谢谢!我没能理解2-compl在这种情况下的相关性。有人已经发布了答案,但我喜欢你的风格,因为它让我通过自己的校对来理解。我要试试这个,然后看看我是否能自己找到答案。非常感谢你!OP请求“任何提示或帮助都将不胜感激!”这篇文章回答了这个问题。这是一个非常多的操作!我很乐意在几天后,当他已经过了提交日期时,把这一点记录下来。@JerryJeremiah仅在NAND方面实现这一点的原因是(在硬件上)拥有大量的一种门要比数量较少的不同类型的门便宜。您不会用NAND重写XOR,因为您正试图优化软件实现。@切普纳:当然,但维基百科有四个NAND门版本。我确实同意五门版本更惯用地实现xor的“定义”,但仍然有更多的门…阅读问题;-)