不引入其它变量交换两数的值

15人阅读 评论(0) 收藏 举报
分类:

^: 二进制异或运算符

可以利用C语言中的异或 ^ 来交换两个数的值,而且不引入其他变量。

#include

int main( )
{
    unsigned int a=60;         //0011 1100
    unsigned int b=13;         //0000 1101
    printf("a=%d,b=%d",a,b);   //输出a,b的值
    printf("\n");
    a=a^b;                     //a=a^b=0011 0001
    b=a^b;                     //b=a^b=0011 1100
    a=a^b;                     //a=a^b=0000 1101
    printf("a=%d,b=%d",a,b);   //输出a,b的值
}

使用宏

#include <stdio.h>
#define MAX(x,y) ((x>y)?(x):(y))
#define SWAP1(x,y) {x=x+y;y=x-y;x=x-y;}
#define SWAP2(x,y) {x=x^y;y=x^y;x=x^y;}

int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("Max number is:%d\n",MAX(a,b));
    printf("交换前:x=%d,y=%d\n",a,b);
    SWAP1(a,b);
    printf("交换后:x=%d,y=%d\n",a,b);
    SWAP2(a,b);
    printf("再次交换后:x=%d,y=%d\n",a,b);
    return 0;
}

利用简单的求和求差

#include <stdio.h>

int main() {
   int a, b;

   a = 11;
   b = 99;

   printf("交换之前 - \n a = %d, b = %d \n\n", a, b);

   a = a + b;  // ( 11 + 99 = 110)  此时 a 的变量为两数之和,b 未改变
   b = a - b;  // ( 110 - 99 = 11)  
   a = a - b;  // ( 110 - 11 = 99)

   printf("交换后 - \n a = %d, b = %d \n", a, b);
}
查看评论

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

  • 2011年04月27日 10:30
  • 630B
  • 下载

有没有意思,你说了算——不引入第三个变量交换两个整型数

交换两个整型数,分别在引入第三个变量和不引入第三个变量的情况下完成。...
  • jianxin1009
  • jianxin1009
  • 2013-08-18 21:52:07
  • 2314

不用中间变量交换两个数的值

不用中间变量,交换变量
  • jnbbwyth
  • jnbbwyth
  • 2015-07-18 18:59:13
  • 2334

如何不引入新的变量,交换两个数的值

在解题过程中,你可能会经常遇到需要交换两个变量的值的时候,大部分的情况下,我们引入了一个新的变量,来帮助我们完成交换。这就好比,有两个瓶子摆在 你面前,一瓶酱油,一瓶醋,让你交换它俩。你总得先拿...
  • qq_33724710
  • qq_33724710
  • 2016-03-19 15:43:10
  • 1806

不用引入第三变量交换两个变量的值

前几天发现了一个问题:有人告诉我,要进行变量交换,就必须引入第三变量! 假设我们要交换a和b变量的值,如果写成 int a=5,b=10; a=b; b=a; 那么结果就是两个都是...
  • job_dinge
  • job_dinge
  • 2013-08-13 15:47:06
  • 6841

不创建临时变量交换两个数的值

不创建临时变量交换两个数的值 我们都应该知道,要交换两个数的值,只需要创建一个临时变量,就可以进行交换。这种方法是简单的,也可以较为轻松的理解明白。代码如下: #define _CRT_SELEC...
  • qq_35116371
  • qq_35116371
  • 2016-06-13 09:16:27
  • 623

不使用中间变量,交换两个数值的三种方法

int main(int argc, const char * argv[]) {   @autoreleasepool {   int a = 10, b = 20; ...
  • u011266870
  • u011266870
  • 2016-11-28 17:50:34
  • 1673

交换两个数(不引入第三个变量)

 前几天去面试,结果碰到这道题目,还着实给没想到,以前也见过这道题目,但那时就是想不起来,难道真是脑子不够用了。 后来回来查了一下,觉得这道题目虽然简单,但有时碰到真的就傻眼了。 所以写下来。publ...
  • zhtsuc
  • zhtsuc
  • 2009-11-08 21:10:00
  • 3863

交换两个整数值,不用临时变量

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

不定义第三个变量,如何交换两个变量的值?

对于初学者来说,交换两个变量的值是一个很经典的算法。它实现起来很简单。 int a=1, b=5; int t; t=a; a=b; b=t; 很简单吧。但是,你有没有想过,如果不定义第三个变量,...
  • u011277123
  • u011277123
  • 2016-10-08 11:09:41
  • 2544
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 711
    排名: 7万+