例如,
- temp
= a; - a
= b; - b=
temp;
这样2个变量中的值就实现了交换。那能不能不引入其他变量就可以实现变量值的交换呢?答案是肯定的。
用异或操作可以实现,有2种实现方法,本质上是一样的。
法1:
- #include
- int
main() - {
-
int a,b; -
while(1) -
{ -
scanf(“%d %d” ,&a,&b); -
a = a^b; //(1) -
b = a^b; //(2) -
a = a^b; //(3) -
printf(“%d %d\n” ,a,b); -
} -
return 0; - }
法2:
- #include
- int
main() - {
-
int a,b; -
while(1) -
{ -
scanf(“%d %d” ,&a,&b); -
b = a^b; //(1) -
a = a^b; //(2) -
b = a^b; //(3) -
printf(“%d %d\n” ,a,b); -
} -
return 0; - }
因为2种方法本质一样,就方法一进行一下证明。
异或操作满足结合律和交换律,且由异或操作的性质知道,对于任意一个整数a^a=0;
证:(第(2)步中的a) a = a^b = (将第(1)步中的b代入b) a^(a^b) = b;
(第(3)步中的b)b = a^b = (将第(1)步中的b代入b,将第(2)步中的a代入a) a^b^a^a^b = a^a^a^b^b = a;
证毕
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221830.html原文链接:https://javaforall.net
