题目:交换两个整形变量的值。如:a=2,b=3; 交换后:a=3,b=2;
1:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a,b,c;
scanf("a=%d,b=%d", &a, &b);
c = a;
a = b;
b = c;
printf("a=%d,b=%d", a, b);
return 0;
}
正常的利用第三个变量交换两个整数的方法,可读性高,效率好。
2:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b;
scanf("a=%d,b=%d", &a, &b);
a = a + b;
b = a - b;
a = a - b;
printf("a=%d,b=%d", a, b);
return 0;
}
若是数值过大,容易栈溢出。
3:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b;
scanf("a=%d,b=%d", &a, &b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d,b=%d", a, b);
return 0;
}
这个方法用到的操作符叫异或,是用于二进制的;比如3的二进制是011,5的二进制是101;如下图所示,只要是相同的位就变成0,不同就是1;用于二进制中。该题利用了 a^a=0;a^0=a的方法所求。