首先注意,原先说的
a^a=0; 即:相同数之间按位异或得0
a^0=1; 即:不同数之间按位异或得1
是将两个数换算成二进制之后通过0和1来进行比较,若相同则得0,不同则得1
方法有二
1.第一种:
但是他也有缺点,如果a和b的值都特别大的话,如果相加,容易造成数据溢出
2.第二种
这种方法就不容易在成数据溢出
分析一下上面的代码:
因为a=70,二进制后8位是01000110
b=20,二进制后8位是00010100
首先是a=a^b; 因为相同数按位异或得0,不同数按位异或得1,所以最终a=01010010,换算成十进制是82,所以a=82
其次是b=a^b; 82的二进制是01010010,它与20的二进制00010100比较之后是01000110,换算成十进制是70,所以现在b=70
最后a=a^b; 是82的二进制01010010和70的二进制01000110进行比较,最后得00010100,换算成十进制就是20
最终 a=20,b=70
写作不易,若有疑问,请多指教,谢谢