如何在不使用临时变量的情况下交互数值

1.问题

交换a,b值的(不能借助临时变量)。

2.解决方法

(1)用数学方法:

public class TestStudy {
    public static void main(String[] args) {
        int a=4;
        int b=5;
        System.out.println("a修改前的值"+a);
        System.out.println("b修改前的值"+b);
        a=a+b;
        //a-b应该等于a,但赋值是b 即b=a
        b=a-b;
        //再用a=a-b 即a=b
        a=a-b;
        System.out.println("a修改后的值"+a);
        System.out.println("b修改后的值"+b);
    }
}


结果:
在这里插入图片描述
这种方法采用数学逻辑,考验数学功底,与编程关联不大。
(2)用编程方法:

public  class TestStudy {
    public static void main(String[] args) {
       int a=4;
       int b=5;
       System.out.println("a修改前的值"+a);
       System.out.println("b修改前的值"+b);
       a = a^b;
       b = a^b;
       a = a^b;
       System.out.println("a修改后的值"+a);
       System.out.println("b修改后的值"+b);
    }
}

结果:
在这里插入图片描述

3.解释原因

我们着重来讲一下第二种方法。
首先我们要知道,第二种方法采用的计算方法是一种位运算(就是直接对整数在内存中的二进制位进行操作的一种运算方式)。
而运算符(^)在编程语言中被称为按位异或(相应位上的数字不相同时取1, 相同为0。)
举个例子:

public class TestStudy {
   public static void main(String[] args) {
      int a=5;   //a=00000000 00000000 00000000 00000101
      int b=6;   //b=00000000 00000000 00000000 00000110
      int c=a^b; //c=00000000 00000000 00000000 00000011=3
      System.out.println(c);
   }
}

结果:
在这里插入图片描述
ok,知道了按位异或的基本原理后,我们来了解一下它具有哪些基本的运算原理,如下:

public class TestStudy {
   public static void main(String[] args) {
      int a=10;  //a=00000000 00000000 00000000 00001010
      int b=0;   //b=00000000 00000000 00000000 00000000
      int c=a^b; //c=00000000 00000000 00000000 00001010=10
      int d=10;  //d=00000000 00000000 00000000 00001010
      int e=10;  //e=00000000 00000000 00000000 00001010
      int f=d^e; //f=00000000 00000000 00000000 00000000
      System.out.println("a^0="+c);
      System.out.println("a^a="+f);
   }
}

结果:
在这里插入图片描述
ok,得到了两个基本运算。
最后我们来看看第二种方法的解释:

public  class TestStudy {
    public static void main(String[] args) {
       int a=4;
       int b=5;
       System.out.println("a修改前的值"+a);
       System.out.println("b修改前的值"+b);
       a = a^b;
       b = a^b;
       a = a^b;
       System.out.println("a修改后的值"+a);
       System.out.println("b修改后的值"+b);
    }
}

首先:

1.  a=a^b;//这个把它当成条件
2.  b=a^b;//把条件代入得
    b=a^b^b;//b^b=0,a^0=a,所以b=a;
3.  a=a^b;//把条件和上面b值代入
    a=a^b^a=(a^b)^(a^b^b)//前面()为a,后面()为b
                     //所以a^b^a=a^a^b=0^b=b

因此a=4,与b=5的结果成功互换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值