目录
题目
题目来源于一道面试题
(C/C++)交换两个int变量的值,不能使用第三个变量,即a=3,b=5,交换之后a=5,b=3
解题
1. 自身处理
int main()
{
int a = 3;
int b = 5;
a = a + b;
b = a - b;
a = a - b;
return 0;
}
- 这种的话就是直接运算,借助a+b的值。可你会发现有缺陷
- 本身规定了是int类型,如果说a和b数值过大,那么会导致溢出的现象
- 因此,在此想出了第二种方法,按位异或
2. 按位异或
a)了解按位异或 ^
- ^ 按位异或(按二进制) (对应的二进制位进行异或,相同为0,相异为1)
- 首先我们要清楚按位异或一些基本特点
-
- 当一个数a与其本身按位异或时,会等于0,即a ^ a = 0
-
- 当一个数a与0按位异或时,会等于其本身,即a ^ 0 = a
b)分析
a = a ^ b;
b = a ^ b;
a = a ^ b;
//转换完成
第一步:a = a ^ b
- 结束后a的值为a ^ b
第二步:b = a ^ b = a ^ b ^ b(带入上式) = a ^ 0 = a
- 刚开始b = a ^ b,将a = a ^ b代入得出b = a
第三步:a = a ^ b = a ^ b ^ a(带入上式) = a ^ a ^ b = 0 ^ b = b
- 最后就是a = a ^ b,将a = a ^ b和b = a带入其中的出a = b
这样子的话就能将a与b的值不借助第三个变量而交换