对自己异或操作结果为0

这个问题考察的是比特位异或操作中的一个重要特性: A XOR A == 0.

我们可以利用这个特性, 遍历数组中的每一项, 然后计算异或值, 最后的结果就是那个单值.

self-xor

Single Number

这个思路, 可以用于快速消除数组中出现偶数次的元素.

交换两个数值

或者, 不使用临时变量, 交换两个变量的值:

#![allow(unused)]
fn main() {
/// Swap two numbers without temporary variable.
///
/// ```rust
/// use bitwise::swap_number::swap_number;
///
/// let mut a = 3;
/// let mut b = 42;
/// swap_number(&mut a, &mut b);
/// assert_eq!(a, 42);
/// assert_eq!(b, 3);
/// ```
#[allow(clippy::manual_swap)]
pub fn swap_number(a: &mut i32, b: &mut i32) {
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}
}