美文网首页
三种变量的交换方式 详解

三种变量的交换方式 详解

作者: 霍运浩 | 来源:发表于2019-02-23 08:32 被阅读0次

    1.利用第三个变量交换数值,简单的方法。

          int x =5,y=10; //定义两个变量
          int temp = x;  //定义第三临时变量temp并提取x值
          x = y; //把y的值赋给x
          y = temp; //然后把临时变量temp值赋给y
    

    2.可以用两个数求和然后相减的方式进行数据交换,弊端在于如果 x 和 y 的数值过大的话,超出 int 的值会损失精度。

        int x =5,y=10; //定义两个变量
        x = x + y;        //x(15) = 5 + 10;
        y = x - y;        //y(5) = x(15) - 10;        
        x = x - y;        //x(10) = x(15) - y(5)
    

    3.利用位运算的方式进行数据的交换,利用的思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围

        int x =5,y=10; //定义两个变量
        x = x^y;
        y = x^y;  //y=(x^y)^y
        x = x^y;  //x=(x^y)^x
    

    首先关于“异或”有几点性质:

    1.任一变量X与其自身进行异或结果为0,即 X^X=0
    2.任一变量X与0进行异或结果不变,即 X^0=X
    3.异或运算具有可结合性,即 abc = (ab)c = a(bc)
    4.异或运算具有可交换性,即 a^b = b^a
    5.a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
    如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
    然后执行过程为:

    第一步 a = a ^ b 完成后 a 变量的结果为 a ^ b;
    第二步 b = a ^ b 等号右边即是 (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a,
    经过第二步运算后b中的值为a;
    第三步 a = a ^ b 此时赋值号右边的a保存的仍然是 a ^ b 的值,而赋值号右边的b已经是原始的a了,
    即等号右边的 a ^ b = (a ^ b) ^ a = a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b, 该值赋值给a,即 a = b,

    经过第三步运算后a中的值为b;

    相关文章

      网友评论

          本文标题:三种变量的交换方式 详解

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