哪位高手帮忙分析一下如下算法:
a^=b^=a^=b;
是怎样做到交换a、b两数的。
自己弄懂了,^是位异或的运算符,即比较相同两位的异同,如果相同则赋值为0,否则为1;例3^5=6计算如下:
3=(00000011)2
5=(00000101)2
比较两数他们右数第二第三位不同,根据规则赋为1,其余为0,即运算后为
(00000110)2=6
原式从右到左,a^=b ----> b不变,a^=b即取出所有不相等的位存入a
第二次b^=a,a不变(a为所有不相等的位),b做位异或运算,如果b中位与a(a为所有不相等的位)相同,则原a中的该位必为0(此处有2种情况,不详细说明了);若不同则a中该位必为1.因此b^=a相当于将b变成了原来的a.
最后一个a^=b同上。效果是将a变成原来的b
此算法最大的优点是省略了中间变量,但只能用于相同类型数的交换。
OK,写到这里,与有同样疑惑的同学分享一下。