精华内容
下载资源
问答
  • 方法一 1: x = y - x; 2: y = y - x; 3: x = x + y; 方法二 1: x = x ^ y; 2: y = x ^ y; 3: x = x ^ y;

    方法一

       1: x = y - x;
       2: y = y - x;
       3: x = x + y;

    方法二

       1: x = x ^ y;
       2: y = x ^ y;
       3: x = x ^ y;

     

    展开全文
  • 不用额外变量交换两个整数的值

    千次阅读 2015-10-04 23:01:59
    不用额外变量交换两个整数的值 【题目】  如何不用任何额外变量交换两个整数的值? 【解答】  使用位运算的异或运算,或者使用加法运算  a异或b的结果是c,那么c就是a整数位信息和b整数位信息的所有不同信息。 a =...

    不用额外变量交换两个整数的值

    题目

      如何不用任何额外变量交换两个整数的值?

    解答

      使用位运算的异或运算,或者使用加法运算

      a异或b的结果是c,那么c就是a整数位信息和b整数位信息的所有不同信息。

    a = a^b,当前a=c;b = a^b相当于b = c^b 当前b=a;a = a^b 相当于a = c^a 当前a=b,完成交换;

    如果是加法交换的话,假设a + b结果是c,那么

    a = a+b,当前a=c;b = a-b相当于b = c-b 当前b=a;a = a-b 相当于a = c-a 当前a=b,完成交换;

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner s = new Scanner(System.in);
    		int a = s.nextInt();
    		int b = s.nextInt();
    		int[] n = exchangeWei(a, b);
    		int[] m = exchangeJia(a, b);
    		System.out.println("ab原值     :a = " + a + "  " + "b = " + a);
    		System.out.println("位 运 算   :a = " + n[0] + "  " + "b = " + n[1]);
    		System.out.println("加法运算:a = " + m[0] + "  " + "b = " + m[1]);
    	}
    
    	public static int[] exchangeWei(int a, int b) {
    		int[] n = new int[2];
    		a = a ^ b;
    		b = a ^ b;
    		a = a ^ b;
    		n[0] = a;
    		n[1] = b;
    		return n;
    	}
    
    	public static int[] exchangeJia(int a, int b) {
    		int[] n = new int[2];
    		a = a + b;
    		b = a - b;
    		a = a - b;
    		n[0] = a;
    		n[1] = b;
    		return n;
    	}
    
    }
    

    运算结果如下:

    1 2
    ab原值  :a = 1  b = 1
    位 运 算:a = 2  b = 1
    加法运算:a = 2  b = 1




    展开全文
  • 借助第三个变量交换两个整数

    千次阅读 2016-08-06 21:40:06
    假设两个数x和y,则有: 方法1,算术运算(加减): x=x+y;  //x暂存两数之和 y=x-y;  //y为两数之和减去y,即原来的x x=x-y;  //x为两数之和减去现在的y(原来的x),变成原来的y 方法2,...

    假设两个数x和y,则有:

    方法1,算术运算(加减):

    x=x+y; //x暂存两数之和
    y=x-y; //y为两数之和减去y,即原来的x
    x=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y

    方法2,逻辑运算(异或):

    x^=y;//x先存x和y两者的信息
    y^=x;//保持x不变,利用x异或反转y的原始值使其等于x的原始值
    x^=y;//保持y不变,利用x异或反转y的原始值使其等于y的原始值

    关于异或运算要牢记两个原则:

    任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
    任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)

    实现这个操作的方法很多。

    最基本的方法就是使用一个临时变量,具体的代码如下:

    int a,b;
    int tmp;
    tmp=a;
    a=b;
    b=tmp;
    另外,还经常出现的一种情况是不使用临时变量来交换两个整型数,一般常见的方法有两种:加法和异或运算,具体如下表所示:

    复制代码
    void swap1(int& x,int& y)
    {
    x=x+y;
    y=x-y;
    x=x-y;
    }
    复制代码
    复制代码
    void swap2(int &x,int &y)
    {
    x=x-y;
    y=x+y;
    x=y-x;
    }
    复制代码
    复制代码
    void swap3(int& x,int& y)
    {
    x ^= y;
    y ^= x;
    x ^= y;
    }
    复制代码

    x和y同号的情况下容易溢出

    x和y异号的情况下容易溢出

     
    左边的两种交换也存在问题就是整数的溢出。

    所以更严谨的做法如下:

    复制代码
    void swap4(int &x,int &y)
    {
    if(x==y)
    return ;
    if((x>0&&y>0)||(x<0&&y<0)) {
    x=x-y;
    y=x+y;
    x=y-x;
    }
    else{
    x=x+y;
    y=x-y;
    x=x-y;
    }
    }
    复制代码
    复制代码
    void swap5(int &x,int &y)
    {
    if(x==y)
    return;
    x^=y;
    y^=x;
    x^=y;
    }
    复制代码
    复制代码
    void swap7(int &x,int &y)
    {
    if(x==y)
    return;
    y=x+y-(x=y);
    }
    复制代码


    【扩展】

    另外,还有不使用临时变量交换N个整型数的操作, 

    有N(N>=2)个变量,不使用临时变量,如何顺次交换它们的值?能否只用一条语句实现?如
    +---+---+---+---+---+
    | a | b | c | d | e |
    +---+---+---+---+---+
    | 1 | 2 | 3 | 4 | 5 |
    +---+---+---+---+---+
     
    要把它变为
    +---+---+---+---+---+
    | a | b | c | d | e |
    +---+---+---+---+---+
    | 2 | 3 | 4 | 5 | 1 |
    +---+---+---+---+---+
    怎样实现?
    首先,我们考虑用异或实现两个变量的交换,可参考我的这篇文章《不用临时变量交换两个数的值》。用C++写函数如下:
     

    int &swap(int &a, int &b)
    {
        b = b ^ a;
        a = a ^ b;
        b = b ^ a;

        return b;
    }

    然后可以把代码优化为:

    int &swap(int &a, int &b)
    {
        b ^= a;
        a ^= b;
        b ^= a;

        return b;
    }

    继续优化,把三句压缩为一句,如下:

    int &swap(int &a, int &b)
    {
        b ^= a ^= b ^= a;
        
        return b;
    }

    还可再优化,如下:

    int &swap(int &a, int &b)
    {
        return (b ^= a ^= b ^= a);
    }

    现在来顺次交换5个变量的值,如下:

    swap(a, b);        //返回b

    swap(b, c);        //返回c

    swap(c, d);        //返回d

    swap(d, e);        

    既然有返回值,那么可以写成链式的,如下:

    swap(a, b);                                 //返回b

    swap(swap(a, b), c);                        //返回c

    swap(swap(swap(a, b), c), d);               //返回d

    swap(swap(swap(swap(a, b), c), d), e);        

    现在,让我们来把swap函数依次用相应的函数体替换掉,如下:

    e ^= d ^= e ^= swap(swap(swap(a, b), c), d);

    e ^= d ^= e ^= d ^= c ^= d ^= swap(swap(a, b), c);

    e ^= d ^= e ^= d ^= c ^= d ^= c ^= b ^= c ^= swap(a, b);

    e ^= d ^= e ^= d ^= c ^= d ^= c ^= b ^= c ^= b ^= a ^= b ^= a;




    展开全文
  • 题目如标题所述。分析:采用位运算,这样的代码指令和利用临时变量一样多,但是位运算明显比赋值略微复杂一点点。... 不用额外变量交换两个整数值,空间节省了,时间负责度略高一些。 ''' a = a ^ b b = a ^ b

    题目如标题所述。

    分析

    采用位运算,这样的代码指令和利用临时变量一样多,但是位运算明显比赋值略微复杂一点点。毕竟赋值不需要经过计算。

    代码

        def exchage_nums(a, b):
            '''
                不用额外变量交换两个整数值,空间节省了,时间负责度略高一些。
            '''
            a = a ^ b
            b = a ^ b
            a = a ^ b
            return a, b
    展开全文
  • 不使用中间变量实现两个整数交换(方法一) x=x+y; y=x-y; x=x-y;
  • 但如果两个变量是对象类型,java(强类型)貌似无能为力了。js却可以,实现方式还不少,如下:   Js代码    var  a = {name: 'jack' },b = {name: 'tom' }; a = [a,b]; b = ...
  • 举例:输入 a = 6, b = 2 输出 a = 2, b =6 var a = 6; var b = 2; b = a - b; //b=4 a = a - b // a=2 b = a + b //b=6 console.log(a, b)
  • 使用中间变量的三行temp代码就不贴了,这里看一下不使用中间变量的方案: ① "a=a+b" 用a将a,b的和存储起来,之后利用减法,b换成a,a再换成b a = a+b; // a存变量之和 b = a-b; // 和-原b得到a a = a-b; // ...
  • c语言 用两个变量实现整数交换
  • 交换两个整数值,不用临时变量

    千次阅读 2013-05-21 11:41:40
    交换两个值,不用临时变量?我们通过位运算中的异或来实现。 //测试代码为C语言代码 前置知识: 1.一个整数自己跟自己异或,结果为0 //因为异或的法则为,相同为0,不同为1,注意这里所说的都是二进制位。 2.任意...
  • 面试题 :实现两个整数变量交换

    千次阅读 2015-07-08 15:13:35
    面试题 :实现两个整数变量交换本帖子总结了四种整数变量交换方式: 方式一:开发中常用的,使用中间变量 方式二:不使用中间变量的,“和”实现 方式三:面试中使用的,按位亦或 “^” *方式四:一句话实现交换...
  • 使用指针形参交换两个整数的值

    千次阅读 2016-11-01 20:58:20
    楼主是个小白,C++Primer看到第六章,做...题目是要求使用指正形参交换两个整数的值。 我心想,这还简单,恩,开始动手了。#include #include using namespace std; void exchange(int *p, int *q) { int *k =0;
  • 添加另外的变量交换两个整数 通过输入两个变量的值,并将两个整数的值交换。 例如:a=3,b=5; 交换后 a=5 b=3; 1.使用中间变量交换 定义一个变量,通过中间的交换使得两个数字完成交换 #define _CRT_SECURE_NO_...
  • // 编写一个函数,使用指针形参交换两个整数的值。 void exchange(int *p, int *q) { // 定义一个交换变量 int temp; // 交换 temp = *p; *p = *q; *q = temp; } int main() { int i = 42,...
  • 不使用第三变量交换两个变量的值

    千次阅读 2014-10-31 08:45:50
    用PHP写一段代码,实现不使用第3个变量交换$a、$b的值,$a、$b的初始值自己定。 $a="hello"; $b="world"; 在Vb语言中,有直接的函数实现两个变量的互换,而在PHP中,确实还不是那么容易。 这里介绍三种实现。...
  • 用函数交换两个整数的值

    千次阅读 2020-02-08 01:33:47
    交换两个整数的值有很多种方法,设置临时变量的情况下,可以加减两个数,用异或等·,很实用,其次有设置临时变量,这个相比较于前面提到的效率高了些,也比较简单,在这里就讲解了。今天想说的是定义一个函数...
  • 交换两个变量的值,不使用第三个变量的四种法方

    千次阅读 多人点赞 2019-09-13 18:42:27
    交换两个变量的值,不使用第三个变量的四种法方 通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下: int a,b; a=10; b=15; int t; t=a; a=b; b=t; 这种算法易于理解,特别适合...
  • 参考链接:http://bing-zz.iteye.com/blog/11232521.交换两个整数可是使用临时变量,如// Javascript代码 function swap(a, b) { var temp = a; a = b; b = temp; }2.还可以使用异或运算进行交换。异或运算有两个...
  • 交换两个整数数值的三种方法

    千次阅读 2017-12-25 14:47:13
    交换两个整数的方法
  • 交换两个整数的值

    千次阅读 2017-07-06 20:47:43
    交换两个
  • Java中实现两个数的交换使用中间变量的方法,无外乎采用引用的方法: void swap(int &amp;a,int &amp;b){ int temp; temp = a; a = b; b = temp; } 或者使用指针: void swap(int *a,int *b){ ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 不使用中间变量交换两

    千次阅读 2016-06-01 21:04:05
    交换两个数的值是比较基础也比较常用的算法,比如在冒泡排序法中,从第一数开始比较,如后一个数比其小则交换两数的值。一般在交换两数的值是,最简单的方法适用的方法就是用中间变量暂存一个数。例如,要交换a,b的...
  • 这需要进行位操作,必较麻烦的, 在学习程序语言和进行程序设计的时候,交换两个变量的值是经常要使用的。通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下: int a,b; a=10; b=15;...
  • 正常情况我们需要多申请一个变量交换两个数的值(假设变量为a, b)。例子如下: int temp = a; a = b; b = temp; 这样子就可以了。但这终究是一种需要申请临时变量的方法,总要去想想临时变量的名字。下面...
  • c语言实现交换两个整数的三种常见方法 1. round 1 定义一个临时变量tmp并把a的值赋给tmp,然后将b的值赋给a,最后将tmp中的值赋给b。 int main() { int a, b; scanf("%d%d", &a, &b); //输入两个整数 ...
  • 用swap函数交换两个整数

    千次阅读 2017-03-22 19:16:00
    #include<stdio.h> //头文件 main() //主函数 { void swap(int *p,int *q);... //定义两个整数 int *p1,*p2; // 定义两个地址 scanf("%d,%d",&a,&b); //输入两个整数 p...
  • 如何使用指针形参交换两个整数的值(详解)

    万次阅读 多人点赞 2018-07-14 11:27:31
    这是因为在swap函数体内部,只是交换两个形参指针本身的值,未能影响实参。这时候如果在形参里面也有一条打印语句的话,能够清晰的看到在被调函数里面,确实交换了指针的值,但是这只在局部范围内有效,调用完毕...
  • C语言交换两个整数的值

    千次阅读 2016-09-29 23:05:25
    在学习用C语言交换两个整数的值得时候,有趣的发现了三种不同思路的解法。 整理大概如下: #include void swap1(int *a, int *b); void swap2(int *a, int *b); void swap3(int *a, int *b); int main(void) { int ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,471
精华内容 36,588
关键字:

不使用变量交换两个整数