异或交换两个数
异或交换两个数
在vita老师那里学的哈哈哈,确实蛮好玩www
异或
我们知道,两个数按位异或,相同为0,不同为1。
XOR | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
分析
举个例子:17的二进制数为10001,3的二进制数为00011。
17^3 = 10001^00011 = 10010 = 18
再异或一遍:
18^3 = 10010^00011 = 10001 = 17
看,又得到了17这个数。由此我们可以知道,一个数异或两遍会得到原来的那个数。
代码实现
int a = 17, b = 3;
a ^= b; b ^= a; a ^= b;
我们也可以写成连等形式。
int a = 17, b = 3;
a ^= b ^= a ^= b;
这样就可以很方便的交换两个数的值啦~