1. 前言
众所周知,要交换两个变量的值,最简单的方式就是使用临时变量。
#include<stdio.h>
int main()
{
int a = 3, b = 5;// 要交换的两个变量
int c; // 声明第三个变量
c = a; // c = 3
a = b; // a = 5
b = c; // b = 3
// 这样就成功交换了两个变量的值
return 0;
}
但是,如果要在不使用第三个变量的前提下,交换两个变量的值,又该怎么做呢?
2. 第一种方法
#include<stdio.h>
int main()
{
int a = 3, b = 5;// 要交换的两个变量
a = a + b;// a = 3 + 5
b = a - b;// b = 3 + 5 - 5 = 3
a = a - b;// a = 3 + 5 - 3 = 5
// 这样就成功交换了两个变量的值
return 0;
}
这种方法有溢出的风险(a + b 或 a - b 的值超出 int 的范围)。
3. 第二种方法
异或:相异得1,相同得0。
比如 a = 3, b = 5 :
a 转换为二进制就是 00000000000000000000000000000011 ;
b 转换为二进制就是 00000000000000000000000000000101 ;
a 异或 b 的结果就是 00000000000000000000000000000110 ;
异或运算的重要性质:
1.a ^ a = 0
2.a ^ 0 = a
3.满足交换律
本题解法如下:
#include<stdio.h>
int main()
{
int a = 3, b = 5;// 要交换的两个变量
a = a ^ b; // a = 3 ^ 5
b = a ^ b; // b = 3 ^ 5 ^ 5 = 3
a = a ^ b; // a = 3 ^ 5 ^ 3 = 5
// 这样就成功交换了两个变量的值
return 0;
}
异或运算不会进位,所以不用考虑溢出的问题。