我们都知道交换两个数的值最传统的方法:
example:
给出两个整形:
int a =20 ;
int b=10;
int c=0 ;
c=a ;
a=b;
a=c ;
利用第三个变量我们可以很轻松的交换两个整形的值。
那如果我们不创建第三个变量交换两个数的值呢:
example:
int a =20 ;
int b=10;
a=a+b:
b=a-b:
a=a-b:
这种方法存在溢出问题:
也可以用乘除:
a=a*b:
a=a/b:
b=a/b;
这种方法存在溢出和限定b不等于0.
下面介绍一种方法:异或(^)
运算规则:
相异为1
相同为0
给定两个整形int:四个字节 32个比特位:
00000000 00000000 00000000 00001010 //10的二进制
00000000 00000000 00000000 00010100 //20的二进制
00000000 00000000 00000000 00011110 //a^b
00000000 00000000 00000000 00010100 //(a^b)^a
00000000 00000000 00000000 00001010 //(a^b)^b
代码测试:
int a = 20;
int b = 10;
a = a^b;
b = a^b;
a = a^b;
也可以用指针进行改变,方法还有很多就不一一列举了。