在日常写代码中,我们想要交换两个数的值,通常都是创建第三个变量,存储其中一个变量的值,用来复刻;
那么有没有一种办法,不需要创建变量,就能交换两个变量的值?
答案是有的!
正常的写法:
int main() {
int a = 4;
int b = 5;
//交换
int c = 0;
c = a;
a = b;
b = c;
printf("a=%d\n", a);//5
printf("b=%d\n", b);//4
return 0;
}
方法1,
int main() {
int a = 5;
int b = 4;
a = a + b;//a=9
b = a - b;//b=9-4
a = a - b;//a=9-5
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
同理你也可以用减法
int main() {
int a = 5;
int b = 4;
a = a - b;//a=1
b = b + a;//b=4+1
a = b - a;//a=5-1
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
你甚至可以用来交换字符
int main() {
char a = 'h';
char b = 'e';
a = a + b;
b = a - b;
a = a - b;
printf("a=%c\n", a);//e
printf("b=%c\n", b);//h
return 0;
}
缺点:但这种算法不能算太大的数
方法2
int main() {
int a = 5;
int b = 4;
a = a ^ b;
b = b ^ a;
a = a ^ b;
printf("a=%d\n", a);//4
printf("b=%d\n", b);//5
return 0;
}
原理:
同样也可以交换字符
int main() {
char a = 'h';
char b = 'k';
a = a ^ b;
b = b ^ a;
a = a ^ b;
printf("a=%c", a);//k
printf("b=%c", b);//h
return 0;
}