a、b两个number类型数值数值交换,不使用中间变量方式实现

137 阅读1分钟

例如: var a = 10; var b = 20; 不使用中间变量的方式,怎么得到结果 a = 20; b = 10;

解法一:

    var a = 10;
    var b = 20;
    a = a + b;
    b = a - b;
    a = a - b;
    console.log(a, b);     //20, 10

解释: 利用四则运算交换数值,首先 a = a + b 把a 赋值为两个变量的和,然后 b = a - b, 这时 a 为 a,b的和,减去b剩下的为a, 所以此时b = 10;同理,a = a - b,a等于a,b的和减去b(值等于a),所以减去a 剩下为b 此时a = 20

解法二:

    var a = 10;
    var b = 20;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    console.log(a, b);     //20, 10

解释:利用异或取值,学过计算机原理的朋友都知道,数值类型在计算机中以二进制存储,异或算法就是二级进制相同位置值不相等去1,否则取0,例如 1^2 => 01^10 = 11 => 3; 3^2 => 11^10 = 01 = 1; 3^1 => 11^01 = 10 = 2; 可以看出异或算法的结果集再异或其中一个因式值会得到另一个另一个因式值;