位运算之swap(不使用临时变量)
#include<cstdio> int main() { int a=5,b=6; printf("原值:a=%d b=%d\n",a,b); a^=b; b^=a; a^=b; printf("第一次交换:a=%d b=%d\n",a,b); a^=b^=a^=b; printf("第二次交换:a=%d b=%d\n",a,b); return 0; }
简单易懂,下面从异或运算的原理来解释第一次交换的三次运算:
|
a = 5 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
|
b = 6 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
第一次异或处理之后:
|
a |
0 |
0 |
0 |
0 |
0 |
0 (*) |
1 (*) |
1 |
|
b |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
第二次异或处理之后:
|
a |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
|
b |
0 |
0 |
0 |
0 |
0 |
1 |
0 (*) |
1 (*) |
第三次异或处理之后
|
a |
0 |
0 |
0 |
0 |
0 |
1 (*) |
1 |
0 (*) |
|
b |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |

浙公网安备 33010602011771号