如何将数字一起异或然后提取数字

时间:2016-12-17 17:45:22

标签: bit-manipulation bitwise-operators xor bitwise-xor

假设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的结果。

2 个答案:

答案 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搜索模式创建了大量数字。