异或运算
定义与相关性质
异或运算(XOR)是一种二进制运算,用符号 ^ 表示。它的规则是:对应的二进制位相同则结果为0,不同则结果为1。==(相当于无进位相加)==
具体的异或运算规则如下:
- 0 ^ 0 = 0
- 0 ^ 1 = 1
- 1 ^ 0 = 1
- 1 ^ 1 = 0
异或运算有一些重要的性质:
- 交换律: 对于任意两个数a和b,都有a ^ b = b ^ a。
- 结合律: 对于任意三个数a、b、c,都有a ^ (b ^ c) = (a ^ b) ^ c。
- 自反性: 任何数与自己异或的结果为0,即a ^ a = 0。
- 零元素: 任何数与0异或的结果为它本身,即a ^ 0 = a。
异或运算常常用于一些算法和编程中,有一些应用场景如下:
- 交换两个数的值: a = a ^ b; b = a ^ b; a = a ^ b; 这样就可以交换a和b的值。
- 清零特定位: 将一个数的特定位清零,可以使用 a = a ^ (1 << i),其中i表示要清零的位。
- 判断两个数是否相等: 如果两个数相等,异或的结果为0;如果不相等,异或的结果非零。
示例:
1 | #include <stdio.h> |
在这个示例中,a和b的二进制分别是0101和0011,它们进行异或运算的结果是6(二进制:0110)。
题目一 如何不用额外变量交换两个数(面试装逼用的)
1 | int a=1;int b=2; |
题目二 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这种数(比用哈希表的方法更简单)
理解过程:

1 | //arr中只有一种数出现奇数次 |
题目三 怎么把一个int类型的数,提取出最右侧的1来
题目意思:

过程:

方法:
a&(~a+1)等用于a&(-a)
题目四 一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数
1 | for (int i = 0; i < length; i++) { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
