void exchangeWithXor(int a,int b){
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
异或运算,相同为 0 相异为 1
//定义a, b
int a = 1, b = 2;
// a = 0001 , b = 0010
a = a ^ b; // a = 0001 ^ 0010 = 0011
b = a ^ b; // b = 0011 ^ 0010 = 0001
a = a ^ b; // a = 0011 ^ 0001 = 0010
//简写的话是这样
//a ^= b;
//b ^= a;
//a ^= b;
//即 a = a ^ b 等价于 a ^= b
- 要注意这一段代码的缺点,二进制操作的效率是不高的,并且这段代码只适用于整数,对于浮点数是不能进行这个操作的,并且这个代码的可读性很差
附:
void exchangeWithPlus(int a,int b){
a = a + b;
b = a - b;
a = a - b;
}
- 如果这两个数太大,相加在一起就会出现溢出的现象,可以把这两个数定义为长整型