交换两个数的三种方法
一,使用中间变量,交换两个变量(最常用)
//交换两个值
// 方法一
int main(void)
{
int a = 3;
int b = 5;
int tmp = 0;//中间变量,用来交换a和b
printf("a = %d b = %d\n", a, b);
tmp = a;
a = b;
b = tmp;
printf("a = %d b = %d\n", a, b);
return 0;
}
结果:
方法二
//方法二
//不使用中间变量,但是当a和b足够大的时候,会出现bug
int main(void)
{
int a = 3;
int b = 5;
printf("a = %d,b = %d\n", a, b);
a = a + b;//将a+b的值赋给a
printf("a = %d,b = %d\n", a, b);
b = a - b;//这个式子表达的意思是 b = a + b - b; 也就是将原来a的值赋给了a
printf("a = %d,b = %d\n", a, b);
a = a - b;//因为现在b里面已经是a的值了,所以现在这个式子的结果是b
printf("a = %d,b = %d\n", a, b);
return 0;
}
结果:
方法三(只能用于整数)
//方法3
//不使用中间变量
int main(void)
{
int a = 3;
int b = 5;
printf("a = %d,b = %d\n", a, b);
a = a ^ b;
printf("a = %d,b = %d\n", a, b);
b = a ^ b;
printf("a = %d,b = %d\n", a, b);
a = a ^ b;
printf("a = %d,b = %d\n", a, b);
return 0;
}
结果:
方法三的具体解释如图:
总结
对于以上的三种方法 ,其中最常使用的还是第一种,第二种方法会在数值上有一定的限制,因为定义的两个数是int类型的,所以就要求其相加的和不能超过int型所规定的范围。而第三种方法不常用,只有再特定的场合下才会使用。