一、问题简述

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

二、代码实现

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
第一步:
  1. num1 = (byte)(num1 ^ num2);
此时num1 = 00000100 ^ 00000110 = 00000010,它就相当于num1 = 2。
第二步:
  1. num2 = (byte)(num2 ^ num1);
此时等式右边num1 = 2,则此式子为:num2 = 00000110 ^ 00000010 = 00000100,它就相当于num2 = 4。
第三步:
  1. num1 = (byte)(num1 ^ num2);
此时等式右边num1 = 2,num2 = 4,则此式子为:num1 = 00000010 ^ 00000100 = 00000110,它就相当于num1 =6。
这就完成了num1和num2的交换。

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

  1. 不借助第三个变量交换a,b两个变量值

    有一道面试题,要求是 不借助第三个变量交换a,b两个变量值. 其有一种解法是通过 " 异或 " 达成目的,代码如下 #include<stdio.h>int main( ...

  2. JAVA不借助第三个变量实现两个变量交换的思考

    网上存在三种方法: 1) 算术运算 简单来说,就是通过+和-运算来实现.代码如下: int a,b; a=10;b=12; a=b-a; //a=2;b=12 b=b-a; //a=2;b=10 a= ...

  3. 不借助第三个变量进行两个变量的换位输出

    换位输出 public static void main(String[] args) { Scanner scan = new Scanner(System.in);// 创建扫描器 System. ...

  4. 不借助第三个变量交换两个整数

    假设两个数x和y,则有: 方法1,算术运算(加减): x=x+y;  //x暂存两数之和 y=x-y;  //y为两数之和减去y,即原来的x x=x-y;  //x为两数之和减去现在的y(原来的x), ...

  5. 交换两个变量的值不使用第三个变量(Java)

    关于这个问题网上有好多答案,最近有人说这是个奇葩问题 个人测试了一把,如果是普通的数字的话,基本上没有问题 public static void main(String[] args) {int a ...

  6. php 实现两变量值对换,PHP互换两个变量值的方法(不用第三变量)

    前言 今天在这里我们就来看看,在PHP中如何在不使用第三变量的情况下,达到交换两个变量值得目的.详细的解说见代码注释,下面来一起看看吧. 一.substr() && strlen() ...

  7. 编程题:两个数比较大小,之后用变量t互换。

    编程题:两个数比较大小,之后用变量t互换. #include<stdio.h> void main() { float x,y,t; scanf("%f,%f",&am ...

  8. 如何在不引入第三个变量的情况下互换两个变量的值

    如何在不引入第三个变量的情况下互换两个变量的值 算术运算 异或运算 解构 总结 例:x = 4:y = 5.如何在不引入第三个变量的情况下互换x与y的值? 算术运算 第一种方法是加法. x = x + ...

  9. C++不借助第三变量交换两个变量的值

    C++不借助第三变量交换两个变量的值 源代码: #include<iostream> using namespace std; int main(){int x,y;cout<< ...

最新文章

  1. 实验七 访问列表配置
  2. (转载)Android手机开发总结
  3. Google准备开始新一年的大扩张
  4. logback日志pattern_@Slf4j 实现日志输入到外部文件
  5. python合并word表格单元格_python docx模块读取word表格遇到合并单元格时的处理
  6. [转载] python基础入门二
  7. 《大型网站技术架构:核心原理与案例分析》-- 读书笔记 (2) : 大型网站核心架构要素(5) -- 安全性...
  8. 数据3分钟丨Snowflake获“2021 DBMS”;OceanBase社区版3.1.2正式发布
  9. 聚类算法 距离矩阵_机器学习基础-层次聚类
  10. php sesssion,php sesssion原理
  11. 【java学习之路】(数据结构篇)001.数组
  12. “阿喀琉斯之踵”与“零缺陷”管理
  13. 简单明了理解交叉验证
  14. 生成和扫描二维码(ZXing库)
  15. 硬盘的读写速度如何计算
  16. websocket给指定客户端推送消息
  17. word2016如何插入题注并交叉引用
  18. 专知原创和整理了一些中英文机器学习从入门到精通的资料,和大家分享一下
  19. 卡尔曼滤波Kalman Filtering:介绍
  20. 容器类:QVector、QList、QSet、QMap使用

热门文章

  1. html中dfn标签,怎么时用html dfn标签
  2. 微软一站式示例代码库(中文版)2012-2-10版本, 新添加ASP.NET, Windows Form, VSX, Windows Shell, WPF等16个Sample
  3. win10下c语言哪个版本号,怎么查看我的电脑用的是win10的哪个版本?win10各版本之间的区别...
  4. 元宇宙热潮:缘起、影响与展望
  5. c语言合并两个顺序表算法,顺序表的两种合并操作(C语言)
  6. 2022-2028年中国踏步机行业市场运营态势及投资战略规划报告
  7. 南大通用GBase8s 常用SQL语句(150)
  8. 那些年踩过的坑-之《Android Q-高通平台UAC(USB Audio Class)调试记录》
  9. 【题解】【蓝桥杯】回文日期
  10. Wifi网络共享----Win8内置承载网络