JAVA 通过 ^ (亦或)交换两个数的值

JAVA 通过 ^ (亦或)交换两个数的值

  1. 上代码:
int a = 4;
int b = 5;
a = a ^ b;    //1式
b = a ^ b;    //2式
a = a ^ b;    //3式

通过上述代码即可交换 a 和 b 的值。

  1. 原理详解:(需要部分离散的基础知识)
    我们将交换值的代码分别记为 1 2 3 式。使用离散数学符号来进行运算。下面式子中出现的 ⊕ 等同于代码中的 ^

    1. 将1式带入2式中:

    b = (a⊕b) ⊕ b;

    由于⊕运算满足结合律,所以上式可写为:

    b = a⊕ (b ⊕ b);

    计算机中存储的是一个数的二进制补码,所以一个数与自己进行 ⊕ 运算,每一位上的值都相同,运算结果每一位上都是0(⊕运算规则:相同为0,不同为1;与⊙(同或相反))上式即可写为:

    b = a⊕0。
    一个数与 0 进行 ⊕ 运算,根据 ⊕ 运算规则,该数中原来为 0 的位还为 0 ,为 1 的位还为 1,说白了就是它本身。所以上式 :

b = a;  //4式
  1. 将 1 式和 4 式代入 3 式中,可得:
    b = (a⊕ b) ⊕ b;
    参考第一步中 2 式中的转换,易得:
a = b;

至此完成值的交换。如果发现错误或有疑问,请留言,谢谢。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值