两数交换
平时写代码中最常见问题之一,不必多说。
1.最常见方法用第三数交换:
int main()
{
int a = 0, b = 0, c = 0;
scanf("%d%d", &a, &b);
c = a;
a = b;
b = c;
printf("%d %d\n", a, b);
return 0;
}
运用c去交换a,b的值。
2.不用第三数交换a,b值:
int main()
{
int a = 0, b = 0;
scanf("%d%d", &a, &b);
a = a + b;
b = a - b;
a = a - b;
printf("%d %d\n", a, b);
return 0;
}
不用第三数c解决了交换问题,但此方法有超出限度(a+b超出)的隐患,有较大局限性。
3.不用第三数且不必担心限度问题:
int main()
{
int a = 0, b = 0;
scanf("%d%d", &a, &b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("%d %d", a, b);
return 0;
}
^为抑或操作符对二进制操作如下:
0 0 0 1 1 1 0 0
1 0 0 0 1 1 1 1 ^
————————————————————————
1 0 0 1 0 0 1 1
^操作符当两数相同则0,相异则1;
那么易得:
a^a=0;
a^0=a;
上述式子为:
a=a^b;
b=a^b 把a=a^b代入则:
b=a^0=a;
同理a=b^0=b;
实现不用第三数两数交换。