对自己异或操作结果为0
这个问题考察的是比特位异或操作中的一个重要特性: A XOR A == 0
.
我们可以利用这个特性, 遍历数组中的每一项, 然后计算异或值, 最后的结果就是那个单值.
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; } }