Java 两个数的交换 这个是怎么交换的

代码:
m=3,n=5;
m = m ^ n;
n = m ^ n;
m = m ^ n;

输出的时候也确实交换了

异或运算等于二进制的无进位相加。

异或运算满足交换率和结合律,即:

a ^ b ^ c = b ^ c ^ a = c ^ (a ^ b)

一个数异或本身等于0
一个数异或0等于这个数本身

基于以上结论:

m = m ^ n ---> m = m ^ n
n = m ^ n ---> n = m ^ n ^ n = m ^ (n ^ n ) = m ^ 0 = m --> n = m
m = m ^ n ---> m = (m ^ n) ^ m = (m ^ m) ^ n = 0 ^ n = n --> m = n

t = a;
a = b;
b = t;

这是a 与 b交换的基本代码

晓得了

异或运算符,把数转换为二进制以后进行异或运算,相同为0不同为1

m=3,n=5;
1.m = m ^ n;
2.n = m ^ n;
3.m = m ^ n;

  1. m = m^n = 3^5
  2. n = m^n = (3^5)^5==> 3^(5^5)==> 3^0==> 3
  3. m = m^ n = (3^5)^((3^5)^5)==> (3^5)^(3^(5^5))==> 3^5^3==> 5

异或再异或就会还原