您的位置:控制工程论坛网论坛 » 自动化软件 » C或C++中不用中间变量交换两变量的值

zhiy66

zhiy66   |   当前状态:在线

总积分:6528  2024年可用积分:0

注册时间: 2007-12-18

最后登录时间: 2012-01-11

空间 发短消息加为好友

C或C++中不用中间变量交换两变量的值

zhiy66  发表于 2009/8/3 0:16:25      1075 查看 1 回复  [上一主题]  [下一主题]

手机阅读

记得上次跟一朋友讨论关于交换两变量的值而不用中间变量的值的问题时,我没仔细想就告诉他说不能实现,因为作为交换必须得有第三变量。其实,当时只是进入了一个误区,认为交换只能通过移动变量来实现。现在觉得有点不好意思了,毕竟发现自己学得不太踏实而且很不严谨。以下是关于变换两变量(而不用中间变量)的方法,其基本思想就是进行代数或逻辑上的变换和值累加得到。

 

1.推荐方法:此方法仅用到了加法和减法,效率高,易理解。

(1)函数:

void swap(int &a,int &b)

{

a+=b;

b=a-b;

a=a-b;

}

(2)宏定义:

         #define swap(a,b) a+=b;b=a-b;a=a-b;

2.异或方法:此方法效率也高,但是不易理解(要理解它记住异或的特性就是:连续跟同一个数异或两次则得到它本身。

(1)函数定义

void swap(int &a,int &b)

{

a=a^b;

b=a^b;         //此式相当于a连续跟b异或两次

a=a^b;         //此式相当于b连续跟a异或两次

}

(2)宏定义:

#define swap(a,b) a="a"^b;b=a^b;a=a^b; 或者

#define swap(a,b) a^=b^=a^=b  //此式的理解不难,^=从右到左分解即同上式。

3.带乘除的方法:此方法不推荐,因为乘除比较耗时间,物别是除法(计算机组成原理上有讲)。

         (1)函数实现

void swap(int &a,int &b)

{

a=a+b;

    b="a-2"*b;

    a=(a-b)/2;

    b="a"+b;

}

         (2)宏定义:

#define swap(a,b) a="a"+b;b=a-2*b;a=(a-b)/2;b=a+b;

1楼 0 0 回复
  • semiscone

    semiscone   |   当前状态:在线

    总积分:4800  2024年可用积分:0

    注册时间: 2008-04-29

    最后登录时间: 2013-07-11

    空间 发短消息加为好友

    semiscone   发表于 2009/8/3 0:16:25

    这问题个一般考试的时候才会碰到,
    写过这么多程序,现实中还没碰到过
    2楼 回复本楼

    引用 semiscone 2009/8/3 0:16:25 发表于2楼的内容

总共 , 当前 /