我想问:A
,B
和C
是任何二进制数。获得C = A & B
(&
为AND
运营商)后,是否有可能从A
和B
恢复C
?
我知道A
的信息会因操作而丢失。我们可以形成像B <...> C = A
这样的函数,以及它的复杂程度吗?
例如:
A = 0011 B = 1010 C = A & B = 0010
C
的第2位是1
,即A
的第2位和B
必须是1
。但是,其他位缺少要恢复的信息。
提前谢谢。
答案 0 :(得分:8)
不,这是不可能的。您可以从AND:
的真值表中看到这一点A B C (A & B)
0 0 0
0 1 0
1 0 0
1 1 1
假设您知道B为0且C为0. A可以是1或0,因此无法从B和C推导出。
答案 1 :(得分:5)
您只能在A
的相应位中恢复1
位B
的位。对于具有零的B
位,A
在相应位置具有什么并不重要,因为C
中的位无论如何都将为零:
A = 1xx0x011x0
B = 1001011101
----------
C = 1000001100
标有A
的{{1}}的排名可以是0或1;无论如何,它们中的信息都会丢失。
答案 2 :(得分:2)
假设你只是说二进制逻辑而不是C变量,那么没有。
考虑:
a=0111, b=1010
因此c=0010
所以你有b=1010, c=0010
所以现在你怎么找到a
?
c
中最左边的位是0,b
中的最左位是1,所以我们知道a
它必须为0
c
中的第二位为0,b
为0,因此您无法分辨a
中的内容({1}中的1或0导致0 })
此时我们已经证明你不能这样做。
答案 3 :(得分:2)
不,因为没有独特的解决方案。无论其他位如何,具有相同位设置为B的任何A值都将满足该等式。
答案 4 :(得分:1)
这是关于方程式的问题。这是不可能的,因为自由度不是零。这与询问a + b = 10相同 - 什么是a,什么是b?
答案 5 :(得分:-1)
您无法恢复A
,但您可以撰写A = (X & ~B) ^ C
。在这里,X
可以是任何内容(并且它会提供所有A
)。
当然,这仅适用于B
和C
,C & ~B == 0
。
这是一个参数化解决方案。 python中的示例
>>> A = 32776466
>>> B = 89773888
>>> C = A & B
>>> C
22020352
>>> X = 1234567890 # arbitrary value
>>> U = (X & ~B) ^ C
>>> U
1238761874
>>> U & B # same result as A & B
22020352