不使用中间变量交换两个变量的值-异或

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;
}
  • 如果这两个数太大,相加在一起就会出现溢出的现象,可以把这两个数定义为长整型
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容