假设a,b,c是三个整数。 然后将它们混合在一起得到d = a ^ b ^ c。
如果我只知道“a”和“d”,则a,b,c之间没有关系。有没有办法检查“a”是否已用于生成“d”?
例如:
d = a ^ b ^ c;
func(a, d); //returns true
func(b, d); //returns true
func(f, d); //returns false, for f!=a, f!=b, f!=c
我的意思是“d”是“a ^ b ^ c”的结果,我们事先并不知道。现在给出“d”和数字“x”,我可以检查x是否是a或b或c中的一个?
抱歉,我忘了提到a,b,c,d这里不是布尔变量。我使用它们代表任何编程语言的整数。所以d = a ^ b ^ c是按位运算。例如,d等于2 ^ 18 ^ 19的结果。
答案 0 :(得分:1)
不,因为对于任何 a和d,你可以使等式为真,例如通过设置b = 0和c = a ^ d。
例如,让我们以你的例子为例,其中d = 2 ^ 18 ^ 19。你希望func(12,d)为'false',因为12不等于2或18或19.问题是d只是3;它不会“记住”完全由2和8和19组成。所以d = 2 ^ 18 ^ 19 = 3 = 12 ^ 0 ^ 15 = 7 ^ 12 ^ 8 = 4 ^ 11 ^ 12 = ...,并且没有理由,仅给出d = 3,以查看12或0或15或7或8或4或11与2或18或19任何不同。
答案 1 :(得分:0)
不,你不能:对于任何一对数字(a和d),你总能找到另一个数字(b)与这对夫妇中的一个数字进行异或而给出另一个数字。
$ cd /usr/local/var/postgres/
$ rm postmaster.pid
此外,您正尝试使用多个XOR ...
事实上,XOR被用作原始的加密方法。您可以尝试猜测,如果您通过XOR搜索模式创建了大量数字。