`

不使用第三个变量完成两个整数的交换

阅读更多
public class Person {   
  
    public static void main(String[] args) {   
        //利用加减法   
        int a = 10, b = 5;   
        a = a + b;   
        b = a - b;   
        a = a - b;   
           
        System.out.println("a=" + a + "\nb=" + b);   
    }   
}
 


还有另外一种方法,且效率更快:
public class Person {   
  
    public static void main(String[] args) {   
        //利用一个数异或本身等于0和异或运算符合交换率   
        int a = 10, b = 5;   
        a = a ^ b;   
        b = a ^ b;   
        a = a ^ b;   
           
        System.out.println("a=" + a + "\nb=" + b);   
    }   
}  


还有一种更厉害的:
int x = 10; 
int y = 20; 
x = y+0*(y=x); 

怎么样,这个强吧!!!呵呵

当然以上几种的算法对应js中也支持,如下:
var a = 11,b = 22;   
a = a + b;   
b = a - b;   
a = a - b;   
  
console.log(a+'\n'+b) 



var a = 11,b = 22;   
a = a ^ b;   
b = a ^ b;   
a = a ^ b;   
  
console.log(a+'\n'+b) 


但如果两个变量是对象类型,java(强类型)貌似无能为力了。js却可以,实现方式还不少,如下:
var a = {name:'jack'},b = {name:'tom'};   
a = [a,b];   
b = a[0];   
a = a[1];   
  
console.log(a.name+'\n'+b.name)  


或者
var a = {name:'jack'},b = {name:'tom'};   
a = {a:a,b:b};   
b = a.a;   
a = a.b;   
  
console.log(a.name+'\n'+b.name) 

正是利用js动态类型(弱类型)系统及对象/数组直接量特性。其它强类型则不可以,编译器会提示类型转换错误。
资源:http://en.wikipedia.org/wiki/XOR_swap
分享到:
评论

相关推荐

    交换两个变量的值,不使用第三个变量的方法及实现.pdf

    本文主要介绍了四种不使用第三个变量来交换两个变量值的方法,适用于C/C++编程语言。 1. **算术运算**: 这种方法基于算术运算,例如加减法或乘除法。通过巧妙地使用算术运算,可以在不借助额外变量的情况下完成...

    C#不借助第三个变量实现两整数交换

    c#中实现两个int变量的数值互换,在借助第三个变量做临时载体的情况下,非常简单。  int a = 10;  int b = 5;  int c ;  c = a;  a = b;  b = c;  如果不借助第三方变量,有几种实现的方法:  1....

    02交换两个变量的值

    通过引入第三个辅助变量,我们可以轻松地完成两个变量之间的值交换。这种技巧在实际编程中非常实用,尤其是在需要频繁进行值交换的算法或程序设计中。掌握这一基本技能对于提高编程能力具有重要意义。

    不用第三方变量交换两数的值

    在编程中,交换两个数值是常见的操作,但有时我们可能会面临一种情况,即不允许使用额外的(第三方)变量来辅助交换。这个问题在各种编程语言中都有不同的解决方案,下面我们将详细探讨几种主流的方法。 首先,我们...

    交换两个变量的值,不使用第三个变量的方法及实现.docx

    在编程中,交换两个变量的值是一个常见的任务,但有时我们可能希望避免使用第三个临时变量。本文探讨了几种不依赖额外变量实现交换的方法,主要针对C/C++编程语言。 1. **算术运算**: 算术运算方法利用加减法或乘...

    实现两个数互换的六种方法

    目录基本数据类型借助第三个变量不借助第三个变量异或引用数据类型 基本数据类型 借助第三个变量 /** * @author guqueyue * @Date 2020/3/6 * 方法一:实现两个数交换 **/ public class Exchange1 { public ...

    任意两个整数之间的和

    3. **用户输入**:为了获取用户的两个整数,我们需要使用输入函数。在Python中,可以使用`input()`函数,然后将返回的字符串转换为整数,例如`int(input())`。在Java中,可以使用`Scanner`类的`nextInt()`方法。 4....

    Java两个变量的互换(不借助第3个变量)具体实现方法

    在Java编程中,有时我们需要交换两个变量的值,但又不希望使用额外的第三个变量来辅助这个过程。这种情况下,可以利用位运算中的异或(XOR)操作符来实现两个变量的互换。本文将详细讲解如何通过异或运算在Java中不...

    易语言源码易语言交换变量值源码.rar

    首先,我们可以使用第三个临时变量作为中介,将其中一个变量的值暂存,然后将另一个变量的值赋给第一个变量,最后将临时变量的值赋给第二个变量。这种方式简洁明了,代码如下: ```易语言 .整数变量 a = 5 .整数...

    数据结构-3期(KC002) 两个整数交换.docx

    标题中的“数据结构-3期(KC002) 两个整数交换.docx”指的是一个关于数据结构的学习资料,可能是一份课程的第三阶段作业或教学内容,涉及如何交换两个整数的值。这个过程在编程中是常见的,尤其是在处理数组、列表...

    输入两个正整数m和n,求其最大公约数 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛

    【程序 1】是求两个正整数 m 和 n 的最大公约数的 Java 程序。这个程序采用辗转相除法(欧几里得算法)来实现。首先,通过 `Scanner` 类从用户那里获取两个输入的正整数。然后调用 `max` 方法,该方法中首先检查 a ...

    两个书交换最小内存方法

    本篇将详细介绍两种不借助额外变量实现两个整数交换的方法:异或交换法与加减法,并通过C/C++及Java等语言进行示例。 #### 异或交换法 **异或交换法**是一种非常有趣的不使用额外变量来交换两个整数的方法。它基于...

    3个变量排序_C++_

    这里,我们讨论的"3个变量排序_C++_"是一个简单的C++程序,它接受三个整数输入,并按照从小到大的顺序输出它们。这种排序方法通常称为三元比较,用于确定三个数中的最小值、中间值和最大值。 首先,我们来理解如何...

    重载函数实现变量排序问题

    - 对于两个整数的排序,定义一个接受两个整数引用作为参数的函数`paixu(int &a, int &b)`。 - 对于三个浮点数的排序,定义一个接受三个浮点数引用作为参数的函数`paixu(float &a, float &b, float &c)`。 2. **...

    不使用中间变量,交换int型的 a, b两个变量的值。

    总结来说,不使用中间变量交换两个变量的值有多种方法,包括位运算、算术运算、数组存储和对象属性。不同的方法适用于不同的场景,位运算和算术运算通常更快,但需要考虑溢出和数据类型限制;数组存储和对象属性方法...

    4_求两组整数的异或集_

    题目描述中提到,从标准输入读取两组整数,每行不超过20个整数,并且每组整数中的元素都是不重复的。这意味着我们需要处理两个不同的整数序列,并对它们进行异或操作。 对于一组整数进行异或操作,我们可以使用位...

    长整数乘法

    3. 两个长整数的乘积的函数调用了部分求和的函数和从表头得到表尾的函数,以及将一个长整数前后数值交换的函数以及显示一个长整数的函数。 知识点4:详细设计 a. 两个长整数的输入 使用头插法的方式,当输入一个4...

    c代码-2.功能:不用第三个变量,实现两个数的对调操作。

    但是,通过巧妙地利用算术运算,我们可以在不使用第三个变量的情况下完成这个任务。这个技巧是基于交换的原理,即两个数相加然后相减(或者反过来),可以达到互换它们值的效果。下面我们将详细探讨这种实现方式。 ...

    两数交换的三种方法C#_java 两数交换的三种方法 两数交换方法

    第三种方法利用了位运算中的异或(XOR)操作符,这种方法不仅不使用额外的变量,而且在大多数情况下效率较高。步骤如下: 1. A与B进行异或操作,结果赋给A。 2. B与新的A(原B异或原A的结果)再次进行异或操作,...

Global site tag (gtag.js) - Google Analytics