实际上是数学知识了
1.一个数与本身的异或是0,即:a^a = 0
2.一个数与0异或,则不变,即: a^0 = a
3.任何一位二进制数同 1 异或都会变成另外一个
4.任何一位二进制数同 0 异或都保持不变
void swap(int a,int b)
{
a = a^b;
b = a^b;
a = a^b;
printf("a = %d, b = %d\n",a,b);
}
数学上
b = (a^b) ^b = a;
有点绕,但仔细思考一下,还是可以知道的。
实际上,这样做交换效率不高。有人进行1亿次运行测算了一下。
int a = 1, b = 2, tmp
{ a ^= b ^= a ^= b; }
real = 0.896, user = 0.892, sys = 0.001;
{ tmp = a;
a = b;
b = tmp; }
real =0.292, user = 0.289, sys = 0.002;
这种情况只在对存储器使用要求极端严格的,会用这种牺牲效率换取空间的做法。
貌似单片机中会使用。
阅读(1061) | 评论(0) | 转发(0) |