使用按位运算符〜和&制作|操作者

时间:2014-05-16 13:47:35

标签: c bit-manipulation

我必须解决一个任务,但找不到答案:
仅使用x | y~来计算& 允许的最大操作数为8

编辑: 在二进制补码和32位整数表示中。 右移是算术性的。

2 个答案:

答案 0 :(得分:5)

通过查看x | y的真值表,您会看到:

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
如果x | yx都不是y,则

0将为1。您可以将其翻译为~(~x & ~y)

~(~0 & ~0) = ~(1 & 1) = ~1 = 0
~(~0 & ~1) = ~(1 & 0) = ~0 = 1
~(~1 & ~0) = ~(0 & 1) = ~0 = 1
~(~1 & ~1) = ~(0 & 0) = ~0 = 1

答案 1 :(得分:2)

这已经得到了解答,但他们没有提到De Morgan。

De Morgan's Law说〜(~A& ~B)相当于(A | B)。我的逻辑设计教授告诉我们要移动泡沫,改变符号"其中一个NOT(〜)是一个" bubble"和AND / OR是"符号"。

(A'& B')' - >移动/分发"气泡" - > (A& B) - >改变"符号" - > (A | B)。

这也可以倒退,缺少一个NOT可以被视为没有泡沫。

(A | B) - >添加"气泡" - > (A' | B')' - >更改符号 - > (A'& B')'

See De Morgan's Laws for some more information