不借助第三者完成两值互换

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

不借助第三者完成两值互换

Java精灵儿   2021-05-05 我要评论

我们平常需要交换两个数值的话,一般会用一个中间变量来暂时存储变量值
如交换a,b两个值可以这样写:`int t;t=a;a=b;b=t;`这样就实现了两个值的交换。两个值的交换经常出现于数组排序算法中由于增加了临时变量,那么就可能增加系统资源的消耗,下面介绍一种更为高效的数值交换的算法;
本程序用java语言编写:

import java.util.Scanner;
public class ab {
    public static void main(String[] args) {
        Scanner in =new Scanner(System.in);
        int a=in.nextInt();
        int b=in.nextInt();
        System.out.println("交换前的值:a="+a+" b="+b);
        a=a^b;
        b=a^b;
        a=a^b;
        System.out.println("交换后的值:a="+a+" b="+b);
    }
}

 



5 3
交换前的值:a=5 b=3
交换后的值:a=3 b=5

本方法使用了" ^ "异或运算符,它的功能是参与运算的两个数各对应的二进制位做异或运算,当两对应的二进制位不同时结果为1,相同时结果为0;
假设我们给a=5,b=3;那么a用二进制表示为`0101`(取int低4位来举例),则b用二进制表示为`0011`顺序执行` a=a^b;b=a^b;a=a^b;`首先`a=a^b=0101^0011=0110=6`再执行`b=a^b=0110^0011=0101=5`最后执行`a=a^b=0110^0101=0011=3`执行完毕后,发现`a,b`两个值已经互换完成;

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们