美文网首页
不使用中间变量交换两个变量的值-异或

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

作者: 一个半吊子工程师 | 来源:发表于2023-06-10 22:18 被阅读0次
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;
}
  • 如果这两个数太大,相加在一起就会出现溢出的现象,可以把这两个数定义为长整型

相关文章

网友评论

      本文标题:不使用中间变量交换两个变量的值-异或

      本文链接:https://www.haomeiwen.com/subject/uuqxydtx.html