如何异或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
我想对数字 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