题目描述
交换两个int变量的值,不能使用第三个变量。即a=3,b=5,交换之后 a=5,b=3
1.加减法
a=a+b;
b=a -b;(b变为原来的a)
a=a -b;(a变为原来的b)
ps:若a+b的值过大,超过整型的范围时可能会溢出,这个方法不再适用。
#include<stdio.h> int main() { int a = 3; int b = 5; printf("a=%d b=%d\n", a, b); a = a + b; b = a - b; a = a - b; printf("a=%d b=%d\n", a, b); return 0; }
2.按位异或法
a=a^b; (a^b相当于于一个密码,把它赋给a)
b=a^b; (密码与原来的b的值按位异或得到原来的a)
a=a^b; (密码与原来的a的值按位异或得到原来的b)
ps:按位异或时不存在进位,所以此方法不会溢出。
#include<stdio.h> int main() { int a = 3; int b = 5; printf("a=%d b=%d\n", a, b); a = a ^ b; b = a ^ b; a = a ^ b; printf("a=%d b=%d\n", a, b); return 0; }