不用中间变量交换两个数值变量的值

2016/04/05 algorithm
  1. 加减法

    var a = 1,
        b = 2;
    
    a = a + b;
    b = a - b;
    a = a - b;
    
    console.log(a, b); // 2, 1
    

    该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失,例如:

    var a = 1.123456789,
        b = 2.987654321;
    
    a = a + b;
    b = a - b;
    a = a - b;
    
    console.log(a, b); // 2.987654321, 1.1234567889999996
    
  2. 乘除法

    var a = 3,
        b = 4;
    
    a = a * b;
    b = a / b;
    a = a / b;
    
    console.log(a, b); // 4, 3
    

    乘除法更像是加减法向乘除运算的映射,它与加减法类似:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b 必不为 0。

  3. 异或法

    var a = 5,
        b = 6;
    
    a ^= b; // a = a^b;
    b ^= a; // b = b^a = b^(a^b) = b^a^b = b^b^a = 0^a = a;
    a ^= b; // a = a^b = (a^b)^a = a^b^a = a^a^b = 0^b = b;
    
    console.log(a, b); // 6, 5
    

    异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换。

上次更新: 2024/10/31 08:48:42