按位运算符:仅使用 & 和 ~ 得到 ^
Bitwise Operators: Using only & and ~ to get ^
这几天我一直被教授给的奖金卡住了:
- 仅使用 ~ 和 &
给出 x^y
- 假设机器使用二进制补码,整数的 32 位表示。
我尝试了很多不同的组合,也尝试写出运算符^的逻辑,但一直没有成功。任何提示或帮助将不胜感激!
XOR 运算符实际上可以写成这两者的组合,我将分两步进行:
A NAND B = NOT(A AND 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
首先,假设您可以使用 &
、|
和 ~
运算符。你能这样实现 ^
吗?
接下来,看看你能不能找到一种方法来完全用 &
和 ~
来表达 |
。
最后,将这些想法结合起来。
祝你好运!
您可以尝试为 XOR、AND 和 OR[=42= 绘制真值表]
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 or b) but not when (a 和 b)
布尔代数中没有 but 所以它变成了 and 这导致了这个:
(a|b)&~(a&b)
编辑:
指出我答错问题了,用DeMorgan定律来构建or
~(~a & ~b)
给出的答案是
~(~a&~b)&~(a&b)
这几天我一直被教授给的奖金卡住了:
- 仅使用 ~ 和 & 给出 x^y
- 假设机器使用二进制补码,整数的 32 位表示。
我尝试了很多不同的组合,也尝试写出运算符^的逻辑,但一直没有成功。任何提示或帮助将不胜感激!
XOR 运算符实际上可以写成这两者的组合,我将分两步进行:
A NAND B = NOT(A AND 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
首先,假设您可以使用 &
、|
和 ~
运算符。你能这样实现 ^
吗?
接下来,看看你能不能找到一种方法来完全用 &
和 ~
来表达 |
。
最后,将这些想法结合起来。
祝你好运!
您可以尝试为 XOR、AND 和 OR[=42= 绘制真值表]
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 or b) but not when (a 和 b)
布尔代数中没有 but 所以它变成了 and 这导致了这个:
(a|b)&~(a&b)
编辑: 指出我答错问题了,用DeMorgan定律来构建or
~(~a & ~b)
给出的答案是
~(~a&~b)&~(a&b)