如何异或n个相同的数字?

How to XOR n same numbers?

我想对数字 k 与它本身进行 n 次异或。最简单的方法是在循环中将它与自身进行 n 次异或。有没有更好的方法?

int t = k;
for(int i = 0; i < n; i++) k = k ^ t;

如果 N 是奇数,则对 K 的 N 个副本进行异或运算将生成 K,如果 N 是偶数,则生成 0。 K ^ K == 0, 0 ^ K == K,它只是在这些结果与每增加一个 K 之间交替。(您的代码当前正在对 k 的 n+1 个副本进行异或运算,我猜这是一个错误。)

int result = (n % 2 == 1) ? k : 0;

一个数的偶数个 XOR's 结果为 0 : k ^ k = 0
一个数字的奇数 XOR's 导致该数字:k ^ k ^ k = k

因此,您无需XOR the number自身n次即可查看最终结果。
事实上,您根本不必异或。只需检查 n 是偶数还是奇数。

return (n & 1) == 0 ? 0 : k

(n & 1) = 0 |奇数时(n & 1) = 1