目录
一,要求
不允许创建临时变量(第三个变量),交换两个整数的内容。
二,实现
代码:
int main() {
int a = 5;
int b = 7;
printf("%d %d\n",a,b);
a = a + b;//a=12
b = a - b;//b=12-7=5
a = a - b;//a=12-5=7
printf("%d %d\n",a,b);
return 0;
}
运行:
缺点:当a,b太大时,会导致a+b结果溢出,交换结果缺失精度。
三,改进
知识点:
位操作符中,^是按(2进制)位异或,操作数必须是整数。
对应的二进制位:相同为0,相异为1。
按位异或操作符:
1.a^a=0;
2.0^a=a;
3.异或是支持交换律的。
证明:
则代码可改为:
int main() {
int a = 5;
int b = 7;
printf("%d %d\n",a,b);
a = a ^ b;
b = a ^ b;//=(a^b)^b=a^b^b=a,b = a
a = a ^ b;//=(a^b)^a=a^b^a=b
printf("%d %d\n",a,b);
return 0;
}
注意: