前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现两个变量的互换(不借助第三个变量)

实现两个变量的互换(不借助第三个变量)

作者头像
itlemon
发布2020-04-03 14:59:25
7260
发布2020-04-03 14:59:25
举报
文章被收录于专栏:深入理解Java深入理解Java

一、问题简述

变量的互换常见于数组排序算法中,常见的做法是创建第三个变量进行互换,但是创建第三个变量仅作为过渡变量,这样不仅消耗系统内存,还使效率低下。这里提供一种不借助第三个变量的算法实现两个变量的互换。

二、代码实现

代码语言:javascript
复制
package net.csdn.exercises02;
import java.util.Scanner;
/*
 * 不借助第三方变量实现两个变量的互换
 */
public class VariableExchange {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入第一个整数:");
		byte num1 = sc.nextByte();
		System.out.println("请输入第二个整数:");
		byte num2 = sc.nextByte();
		num1 = (byte)(num1 ^ num2);
		num2 = (byte)(num2 ^ num1);
		num1 = (byte)(num1 ^ num2);
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2);
		sc.close();
	}
}

三、结果分析

分析:

这里用的是byte类型的数据,是为了方便分析,int等其他的类型也适用。

假如num1输入的是4,num2输入的是6,那么num1的二进制值是00000100,num2的二进制值是00000110

第一步:

代码语言:javascript
复制
  1. num1 = (byte)(num1 ^ num2);

此时num1 = 00000100 ^ 00000110 = 00000010,它就相当于num1 = 2。

第二步:

代码语言:javascript
复制
  1. num2 = (byte)(num2 ^ num1);

此时等式右边num1 = 2,则此式子为:num2 = 00000110 ^ 00000010 = 00000100,它就相当于num2 = 4。

第三步:

代码语言:javascript
复制
  1. num1 = (byte)(num1 ^ num2);

此时等式右边num1 = 2,num2 = 4,则此式子为:num1 = 00000010 ^ 00000100 = 00000110,它就相当于num1 =6。

这就完成了num1和num2的交换。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题简述
  • 二、代码实现
  • 三、结果分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档