不用使用中间变量让两个int变量的值互换

不用使用中间变量让两个int变量的值互换
这个问题在面试的时候出现概率很高,相信还有很多人不会

在回答这个问题前,让我们先看看异或这个运算符

什么是异或

变量的值不同时结果为1,值相同时结果为0

在java中异或的符号是 ^,具体运算结果看下表:

a b
0 0 0
0 1 1
1 1 0
1 0 1

正确做法

了解了什么是异或后,我们在看看看正确的做法,代码如下:

  int a =2;
  int b =3;
  System.out.println("a="+a+",b="+b);
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
  System.out.println("a="+a+",b="+b);

输出结果

a=2,b=3
a=3,b=2

解释一下

神奇吧,两个变量经过3次异或后,值就互换了,示例为了大家理解方便举例变量2和3,实际上任何值都是一样的

a = 2 = 10 (二进制)
b = 3 = 11 (二进制)
第一次异或
a = a ^ b;
结果: 10 ^ 11 = 01,a = 01
第二次异或
b = a ^ b;
结果:01 ^ 11 = 10,b=10;b的值已经换过来了
第三次异或
a = a ^ b;
结果:01 ^ 10 = 11,a=11;a的值也换过来了

总结

  • 异或:值不同时异或结果为1,值相同时异或结果为0
  • 第一次异或的结果 等于 a b 两个变量的差异值
  • 第二次,差异值异或b,结果自然就是另一个变量的值a,这个时候b=之前的a
  • 第三次:差异值异或b,结果自然就是b

猜你喜欢

转载自blog.csdn.net/wlddhj/article/details/84309076