3 种交换int型数据的算法

来源:互联网 发布:java支付流程图 编辑:程序博客网 时间:2024/05/16 11:19

相信大家对于常规的利用第三方变量交换两个变量的值已经很熟悉了吧!今天我在这总结一下:

     第一种,也是大家用的比较多的一种,同时也是最容易理解的一种:

(ps:对于新手来说很有可能忘记这儿必须传入地址,而不是传值)

    void switch(int &a,int &b)//a=3,b=2    

   {

   int c=a;//c=3,a=3

   a=b;//a=2,b=2

   b=c;//b=3,c=3

   }

当然也可以用

    void switch(int *a,int *b)//*a=3,*b=2    

   {

   int c=*a;//c=3,a=3

   *a=*b;//*a=2,*b=2

   *b=c;//*b=3,*c=3

   }

第二种:办法使用加法和减法
(ps:不推荐这个办法,做加法是很有可能超出int 型数据的最大值(int 型数据在32位的系统中占4个字节,也就是32位)

 void switch(int &a,int &b)//a=3,b=2    

   {

   a+=b;//a=5,b=2

   b=a-b;//b=3,a=5;

  a-=b;a=2,b=3

   }

(ps:这个不方便记忆)

或者:

void switch(int &a,int &b)//a=3,b=2    

   {

   a=a+b;//a=5,b=2

   b=a-b;//b=3,a=5;

  a=a-b;a=2,b=3

   }

(ps:可以简记为:+--)

最后一种,也是最安全,最难理解的一种

void switch(int &a,int &b)//a=3,b=2    

   {

//利用二进制和位运算

   a^=b;// a=0000 0011,b=0000 0010  a^b= 0000 0001  (a*)(现在a的值)

   b^=a;//b=0000 0010 a=0000 0001 a^b=0000 0011(b*)

  a^=b;//a=0000 0001  b=0000 0011 a^b=0000 0010(a*)

   }




1 0
原创粉丝点击