首页 > 其他 > 详细

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

时间:2021-05-05 21:31:00      阅读:36      评论:0      收藏:0      [点我收藏+]

我们平常需要交换两个数值的话,一般会用一个中间变量来暂时存储变量值
如交换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`两个值已经互换完成;

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

原文:https://www.cnblogs.com/tsingby/p/14732288.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!