使用异或实现两个数的换位,不需要中间变量,提高效率

前几天,在书城看书,看了一个很有趣的问题:两个数换位,不需要中间变量,提高程序执行效率。

核心代码如下,

Scanner s = new Scanner(System.in);
System.out.println("please enter the first number:");
 int  A = s.nextInt();
 Scanner s1 = new Scanner(System.in);

 System.out.println("please enter the second number:");
 int B = s1.nextInt();
 A = A^B;
 B = B^A;
 A = A^B;
 System.out.println("A ="+A+"/n"+"B ="+B);

 

我想了好久,那是根据什么原理呢?

我试着去问一些同学,还有上技术Q群问,终于给我找到满意的答案。

我综合了一下我比较满意的答案,整理一下,供参考,不足之处,大虾们别见怪!

 

1)最初始的异或运算规定:

    1^1 =  0;

    1^0 = 1;

    0^1 = 1;

    0^0 = 0;

 

2)但是现在可以这么定义:

   前提条件:两个数相等,那么就可以这样

    任何数^任何数 = 0;

           任何数^0  = 任何数;

           0^任何数  = 任何数;

                0 ^  0 = 1;

 

3)同时,异或还满足交换率和结合律,如:

       (A^B)^C = A^(B^C) = (A^C)^B

 

弄清上面三点之后,着手分析我碰到的题目:

      A = A^B;
      B = B^A;
      A = A^B;

简单合并一下:

     最原始的就是: B = B^A = B^A^B = A;此时B得到的是A的值

     最原始的就是: A = A^B = A^B^A = B;此时A得到的是B的值


 最终,打印出来的是:A = B

                               B = A

 

 最后,谢谢所有帮过我,和没帮过我的人,来一句总结:知识不怕不懂,最怕就是不懂又不问人,这样才是可怕的!希望这篇BLOG对需要的人有帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值