本帖最后由 zhangshisk 于 2013-1-21 14:13 编辑
^:异或
true ^ true = false
true ^ false = true
false ^ true = true
false ^ false = false
两边相同,结果是false
两边不同,结果是true
例如 60^6用二进制表示(只写8位)
0011-1100
^0000-0110
=0011-1010
如果结果再^6的话
0011-1010
^0000-0110
=0011-1100
结果就是60
这个就是原理:一个数异或同一数2次,结果还是这个数.也就是a^b^b的结果是a,
这题要是互换的话应该这么写:
a = a^b;
b = a^b;//在这里可以拆分为:b = a^b^b;这时也就是说把a的值赋给了b,
a = a^b;//在这里可以拆分为:a = a^b^a^b^b=(a^b^b)^a^b=b^a^a,
这种方法可以防止溢出,因为没有进行算术运算,只是逻辑运算.
用第三方变量互换的话如果值过大容易超出类型范围, |