Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 按位运算符:仅使用&;而且,为了得到,^_C_Bitwise Operators_Boolean Algebra - Fatal编程技术网

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表述为:

(ab)但时(ab)

布尔代数中没有but,因此它变成了一个,这导致:

(a|b)&~(a&b)
编辑: 指出我回答了一个错误的问题,使用DeMorgan法则来建造手术室

~(~a & ~b)
答案是

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

可以help@EdHeal我在前面的另一个问题上看到了这一点,但是我找不到XOR证明,我会再看一遍,谢谢!我没能理解2-compl在这种情况下的相关性。有人已经发布了答案,但我喜欢你的风格,因为它让我通过自己的校对来理解。我要试试这个,然后看看我是否能自己找到答案。非常感谢你!OP请求“任何提示或帮助都将不胜感激!”这篇文章回答了这个问题。这是一个非常多的操作!我很乐意在几天后,当他已经过了提交日期时,把这一点记录下来。@JerryJeremiah仅在NAND方面实现这一点的原因是(在硬件上)拥有大量的一种门要比数量较少的不同类型的门便宜。您不会用NAND重写XOR,因为您正试图优化软件实现。@切普纳:当然,但维基百科有四个NAND门版本。我确实同意五门版本更惯用地实现xor的“定义”,但仍然有更多的门…阅读问题;-)