目录
一,常规
通常来说我们交换两个变量的值会借用创建一个新的变量来完成
int main()
{
int a = 6;
int b = 8;
int tem = a;
a = b;
b = tem;
return 0;
}
二,不创建新的变量
那如果不创建新的变量能否交换a与b的值呢?
int main()
{
int a = 6;
int b = 8;
a = a + b;
b = a - b;
a = a - b;
return 0;
}
答案是可以的,
第一步,a=a+b; 此时a的值为a,b的和,
第二步,b=a+b-b=a; a,b的和减去b即为a
第三步,a=a+b-a=b; a,b的和减去a即为b
完成交换
但使用加法是存在一个问题的:C语言中整型变量的取值范围是-2147483648~+2147483647,如果这里的a=2147483647,b=2147483647,这两个变量都没有超出范围,但相加之后是超出整型变量的取值范围的,那a=a+b就不能储存正确的数字,我们可以在调试,监视窗口中看见
三,不创建新的变量,最终版
这里运用到了异或操作符a^b^a=b,a^a=0,b^0=b的的性质
int main()
{
int a = 2147483647;
int b = 2147483646;
a = a ^ b;
b = a ^ b;
a = a ^ b;
return 0;
}
这里涉及位运算符异或(^),二进制的异或,就是两个数转换成二进制表示后,按照位进行以下运算:
知识点:
1,异或(^)满足交换律和结合律
2,两个相同的十进制数异或的结果一定位零
3,任何一个数和 0 的异或结果一定是它本身
同时,不会产生第二种方法的问题,我们看调试,监视窗口: