算法基础-位运算之异或运算-性质及面试题讲解
1. 认识异或运算
-
两个数在进行异或运算时,可以理解为两个数的二进制对应位上的数向比较,相同为0,不同为1,如:
9(1001) ^ 10(1010) = 3(0011)
-
简单点也可以记为,两个数二进制位上的无进位相加,如:
5(101) ^ 6(110) = 3(011)
其中从左到右第1位1+1 忽略进位,此位剩 0
,第2位0 + 1 = 1 不进位
,第3位1 + 0 = 1 不进位
结果为011
-
异或运算的性质(大家试着用例子去尝试,可以很容易理解):
0 ^ N = N
,N ^ N = 0
(N为一个整数)- 异或运算满足交换律
a ^ b = b ^ a
和结合律(a ^ b) ^ c = a ^ (b ^ c)
2. 运用异或运算的面试题(以JavaScript为例,其他语言类似)
-
题目一:如何不用额外的变量交换两个数
let a = 123 let b = 456 console.log(a, b) // 交换过程 a = a ^ b b = a ^ b // b = a ^ b ^ b = a a = a ^ b // a = a ^ b ^ a = b console.