变量值交换的几种方式

题目:交换两个int类型变量a,b的值


方法一:使用第三个变量

置换代码如下:

public void swap(int a, int b){
    // 设定一个临时变量
    int temp;

    temp = a;
    a = b;
    b = temp;
}

方法二:使用异或运算符

首先需了解异或运算符的运算方式和特性。

  • 异或运算符的运算方式:相同为0,不同为1。即,

        a = 11011

        b = 10101

则,

        11011

     ^ 10101

    ————

        01110

      a^b = 01110 

  • 异或运算符的特性:
  1. 0和任何数异或都为此数,即,0^a = a
  2. 任何数和自己异或都为0,即,a^a = 0
  3. 满足交换律,即 a^b = b^a
  4. 满足结合律,即 a^b^c = a^(b^c)

置换代码如下:

public void swap(int a, int b){
    a = a^b;
    b = a^b;
    a = a^b;
}

解析说明,假设此时 a = 甲, b = 乙

  • 步骤一:运行 a = a^b,则此时,a = 甲^乙,;b不变,b = 乙
  • 步骤二:运行 b = a^b,则此时,a不变,a = 甲^乙;b = a^b = (甲^乙)^乙,根据异或运算的特性,b = 甲^(乙^乙) = 甲^0 = 甲
  • 步骤三:运行 a = a^b,则此时,a = a^b = (甲^乙)^甲 = 甲^甲^乙 = 0^乙 = 乙;b不变,b = 甲

完成置换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值