文章目录

  • 方法一 借助第三方
  • 方法二 变量自加减
  • 方法三 巧用异或位运算

方法一 借助第三方

借助第三方临时储存一个变量的值,是我们最常用的方法。这个方法不仅可以交换两个整数,任意类型的两个变量交换,都可以通过第三方实现,但是需要定义临时变量。

int main(){int a=10;int b=20;printf("交换前:a=%d b=%d",a,b);int tmp=a;a=b;b=tmp;printf("交换后:a=%d b=%d",a,b);return 0;}

方法二 变量自加减

这个方法的思想是,先用一个变量储存两变量的和,用和减去另一个变量,就完成了交换。
可能会出现溢出问题,两变量和太大,变量存储不下,而且只能用于可加减变量类型。

int main(){int a=10;int b=20;printf("交换前:a=%d b=%d",a,b);a=a+b;b=a-b;//相当于b=a+b-ba=a-b;//相当于a=a+b-(a+b-b)printf("交换后:a=%d b=%d",a,b);return 0;}

方法三 巧用异或位运算

按位异或 ^ 相同为0,相异为1,符号两侧都应是整型家族。

  • 任何整数与0异或,都是他本身。
  • 任何整数与本身异或,都是0。
  • 异或运算支持交换律和结合律。
    由上面异或运算的性质,我们能写出:
int main(){int a=10;int b=20;printf("交换前:a=%d b=%d",a,b);a=a^b;b=a^b;//相当于b=a^b^b=a^0=aa=a^b;//相当于a=a^b^a=b^0=bprintf("交换后:a=%d b=%d",a,b);return 0;}

异或运算交换变量,不必担心溢出问题,也不需要定义临时变量,但只能用于整型家族的变量交换。


码字不容易,欢迎关注、点赞、收藏、评论、转发。