C语言学习【8】-浅谈不使用第三个变量交换两个变量的值的方法

1、方法一:其他语言实现(C语言)


a = 1;
b = 2;
a = b - a; // a = 1; b = 2
b = b - a; // a = 1; b = 1
a = b + a; // a = 2; b = 1
1) 原理:

把a、b看做数轴上的点,围绕两点间的距离来进行计算。

2) 具体过程:

① a=b-a求出a、b两点的距离,并将其保存在a中;

② b=b-a求出a到原点的距离(b到原点的距离与a、b两点距离之差),并将其保存在b中;a=b+a求出b到原点的距离(a到原点距离与a、b两点距离之和),并将其保存在a中。

3) 缺点:

① 只能用于数字类型,不能用于字符串;

② a+b有可能溢出(超出int的范围),但溢出是相对的,+溢出,可以-回来,所以溢出不溢出没关系,就是不安全。

程序实现:

输出结果为:

2、方法二:其他语言实现(C语言)


a = 10; // a = 1010
b = 12; // b = 1100
a = a ^ b; // a = 0110,b = 1100
b = a ^ b; // a = 0110,b = 1010
a = a ^ b; //a = 1100 = 12,b = 1010 = 10
原理:由异或运算的特点决定,通过异或运算能够使数据中的某些位翻转,其他位不变,这就意味着任意一个数a与任意一个给定的值b连续异或两次,值不变。

a ^ b ^ b == a;
 

输出结果是:

发布了20 篇原创文章 · 获赞 1 · 访问量 386

猜你喜欢

转载自blog.csdn.net/qq_41505080/article/details/104180370