今天来浅谈一下如何实现两个数交换。
借数计算
最简单且易思考的就是借助另一个数来计算。
就好比你有一个雪碧瓶子装满可乐,一瓶个可乐瓶子装满雪碧,如何让两瓶饮料互换瓶子呢,肯定是再拿一个空瓶子,然后先将可乐瓶子里面的雪碧倒在空瓶子里,然后将雪碧瓶子里的可乐倒入可乐瓶子里,然后将新拿出来的瓶子里的雪碧倒进雪碧瓶子里,这样就完成了饮料的置换。
代码如下
int main()
{
int a = 3;
int b = 5;
int c = 0;
c = a;
a = b;
b = c;
printf("a=%d,b=%d", a, b);
return 0;
}
相加计算
int main()
{
int a = 3;
int b = 5;
a = a + b;
b = a - b;
a = a - b;
printf("a=%d,b=%d", a, b);
return 0;
}
但是这种方式有一种弊端,如果a和b很大,但是没有超出整数的大小,但是a+b如果超出,就会发生溢出。
位运算符^计算
第三种方法就是用位运算符^
^ :按(二进制)位异或
使用规则:相同为0,相异为1
a ^ a = 0 ;
0 ^ a = a ;
异或运算不会溢出。
int main()
{
int a = 3;
int b = 5;
a = a ^ b;
b = a ^ b;//b = a ^ b ^ b = a
a = a ^ b;//a = a ^ b ^ a = b
return 0;
}