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

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

作者: 一个半吊子工程师 | 来源:发表于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