题目:定义整型变量 a、b,写出将 a、b 两个变量值进行互换的程序
方法一:通过中间变量来实现(中间变量需要占用额外内存空间)
int a = 6;
int b = 28;
int c;
c = a;
a = b;
b = c;
方法二:不使用中间变量时,可使用加减法(注:当(a+b > INT_MAX)时,此时会产生正溢出,导致最终结果出错)
int a = 6;
int b = 28;
a += b; //a = 6+28 =34
b = a - b; //b = 34-28 =6
a = a - b; //a = 34-6 = 28
方法三:指针(地址)的交换(需使用支持指针的语言)
void exchange(int *p1,int *p2){
//这里指针(地址)的交换和前面的方法一类似
int temp;
temp = p1;
p1 = p2;
p2 = temp;
}
int main(){
int a = 6;
int b = 28;
exchange(&a,&b);
return 0;
}
方法四:异或思想(位运算)
int a = 6; //二进制为:00110
int b = 28; //二进制为:11100
a = a ^ b; // 异或后: 11010
//此时a为: 11010
//此时b为: 11100
b = a ^ b; // 异或后: 00110 = 6
//此时a为: 11010
//此时b为: 00110
a = a ^ b; // 异或后: 11100 = 28
// ^ 为位运算,相同为0,不同为1(二进制数)
/**
*
*等效于:
*异或运算
由:1.交换律:a ^ b ^ c <=> a ^ c ^ b;
2.任何数与0异或为任何数:0 ^ n => n;
3.相同的数异或为0:n ^ n => 0;
故:a = a ^ b;
b = a ^ b = (a ^ b) ^ b = a;
a = a ^ b = (a ^ b) ^ (a ^ b) ^ b = b;
*/
(ps:如有误或需改进之处望指出,不胜感激!)