为何以下XOR异或运算代码返回错误结果?
代码执行结果与预期不符的原因解释
异或运算的核心特性
- 任何数与自身异或结果为0:
a ^ a = 0 - 0与任何数异或结果等于该数本身:
0 ^ a = a - 异或运算满足交换律和结合律,运算顺序不影响最终结果
数组元素与运算过程分析
代码中的数组input = {2,3,4,5,4,3,7,2}里,各数字的出现次数:
- 2、3、4:均出现2次(偶数次)
- 5、7:均出现1次(奇数次)
根据异或特性,出现偶数次的数字会两两异或抵消为0,最终剩余的是出现奇数次的数字的异或结果:5 ^ 7。
将5(二进制101)与7(二进制111)异或,得到二进制010,对应十进制的2,这就是代码返回2的原因。
预期结果错误的原因
你预期结果为5,是误解了异或的适用场景:异或仅能在数组中仅有一个数字出现奇数次,其余均为偶数次的情况下,直接得到那个唯一的数。但此数组中有两个数(5和7)都只出现一次,因此最终结果是这两个数的异或值,而非其中某一个。
内容的提问来源于stack exchange,提问作者Nick Kamal
相关产品推荐
相关产品推荐

