按位或操作的相反操作

7

I compute

c = a 'OR' b // bitwise OR operation here

现在只给出 cb 的值,我该如何计算出原始值 a


只是举个例子- 我有x34,我使用x40进行OR操作,然后得到x74。 现在使用x40和x74,如何得到x34。 对于一些值,我发现XOR操作会给出'a',但我真的不确定它是否总是有效的。 x34 | x40 = x74 x74 ^ x40 = x34 - Kapil
为什么要负面投票?这是一个非常清晰的问题,而且与编程有关。即使不可能,它仍然是一个可回答的问题。 - Umair Ahmed
2
如果你对a和b执行XOR操作,如果你知道b和c,那么很容易找到a。只需执行c XOR b即可得到a。但是使用OR操作是不可能的(请参见下面的答案)。 - Burkhard
6个回答

24

这是不可能的。

下面是一个简单的例子来阐述我的观点(假设'a','b'和'c'都是1位):

如果'b'是1,'c'将始终为1,你无法确定'a'的值。


1
是的,对于AND运算也是一样的。 - sharptooth

5

您无法可靠地返回。例如,a = 0010,b = 0011。a OR b = 0011。如果a不同(例如0001或0011),则结果仍然相同。


4

由于 a OR 1 始终为 1,a OR 0 始终为 a,所以只有当 b 为 0 时才能找到 a 的值。

编辑:AND 和 OR 是有损操作(不能总是被反转)。而 XOR 和 NOT 是无损/可逆的。


3

这是不可能的,或操作是不可逆的。有许多不同的a值会给出相同的c值。

你可以通过使用b的补码进行and操作来获取一个可能的a值。

a = c & ~b

2
强调“可能的值” - Nathan Fellman

1

那是不可能的。没有办法确定 'a' 会是什么。


1
从数学角度来看,从C和B中推导出A是不可能的。 如果在第n位上,C的值为1且B的值也为1,则无法确定A的第n位是0还是1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接