| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 950 人关注过本帖
标题:C++语言如何实现变量的互换?知道的请近来解释一下!
只看楼主 加入收藏
东方罗密欧
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-22
收藏
 问题点数:0 回复次数:8 
C++语言如何实现变量的互换?知道的请近来解释一下!
第一种方法,也是最常规的方法(利用临时变量):
#include <stdio.h>
#define PRINT(a,b) printf(#a "=%d," #b "=%d\n",a,b)
void main()
{


int a=12;

int b=44;

int temp;

PRINT(a,b);

/*开始交换a,b的值*/
    temp=a;

a=b;

b=temp;

PRINT(a,b);
}
第二种方法:
#include <stdio.h>
#define PRINT(a,b) printf(#a "=%d," #b "=%d\n",a,b)
void main()
{


int a=12;

int b=44;

PRINT(a,b);

/*开始交换a,b的值*/
    a=a+b;

b=a-b;

a=a-b;

PRINT(a,b);
}
第三种方法(利用位操作):
#include <stdio.h>
#define PRINT(a,b) printf(#a "=%d," #b "=%d\n",a,b)
void main()
{


int a=12;

int b=44;

PRINT(a,b);

/*开始交换a,b的值*/


a=a^b;

b=b^a;

a=a^b;

PRINT(a,b);
}



这个是摘自其他论坛的C语言变量互换方法,可我看不懂.由于我学的时候是直接从C++开始学的。才开始学,请老鸟们解释一下.谢谢.
搜索更多相关主题的帖子: 变量互换 
2008-10-22 14:39
beyondlwm
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-7-19
收藏
得分:0 
第一个不用解释
第二个用笔自己画一下就完了
第三个好像C++里不支持这个运算符吧?就算支持,个人觉得第一种已经非常够用。
2008-10-22 15:03
东方罗密欧
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-22
收藏
得分:0 
第三种方法在C++里面可以用,我刚刚编译过的。可以成功运行。
2008-10-22 15:16
beyondlwm
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-7-19
收藏
得分:0 
The bitwise exclusive OR operator (^) compares each bit of its first operand to the corresponding bit of its second operand. If one bit is 0 and the other bit is 1, the corresponding result bit is set to 1. Otherwise, the corresponding result bit is set to 0.

Both operands to the bitwise exclusive OR operator must be of integral types. The usual arithmetic conversions covered in Arithmetic Conversions are applied to the operands.



MSDN的解释,这个是异或的意思。
比如 a =1 ; b=2;
在二进制里
a = 01
b = 10
(我写简单点,前面应该还有几个零)

规则是,1 ^ 1 = 1 ; 0 ^ 0 = 1; 1^0 = 0; 0^1 = 0
就是说二者不一样的时候返回1,一样的时候返回0
首先a = a ^ b;
a = 01
b = 10
a的第一位和b的第一位不一样,所以结果的第一位是1
a的第二位和b的第二位也不一样,结果的第二位还是1
所以a = 11
然后  b = b ^ a;
a = 11
b = 10
第一位相同返回0
第二位不同返回1
所以b = 01 这样就和a相同了

类推
2008-10-22 15:26
beyondlwm
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-7-19
收藏
得分:0 
原理和第二种是一样的,感觉上。不过没研究的必要。实际上很少有人使用这种晦涩的方法。
2008-10-22 15:27
Soul寂
Rank: 1
等 级:新手上路
帖 子:117
专家分:1
注 册:2008-9-29
收藏
得分:0 
第一种和第二种用的比较多!第三种好像很少用!
2008-10-22 19:59
东方罗密欧
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-22
收藏
得分:0 
还是第一,二种更好理解一点!谢谢大家的回答!
2008-10-24 15:17
xmnathan
Rank: 2
等 级:论坛游民
威 望:1
帖 子:73
专家分:10
注 册:2008-8-30
收藏
得分:0 
变量?只考虑数值型的话。。。

唉 好难
2008-10-24 15:20
木木木
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-10-23
收藏
得分:0 
A^B=(A&B)|(~A&~B)   //A异或B等价于(A与B)或(非A与非B)
用布尔代数运算B^(A^B),结果为A;
同理A^(A^B),结果为B。
这样就实现了变量的互换。

第一种算法用的比较普遍;第二种算法减少了一个变量,有点创意;第三种算法少见。

有志者,事竟成,百二秦关终属楚;
苦心人,天不负,三千越甲可破吴。
2008-10-24 20:32
快速回复:C++语言如何实现变量的互换?知道的请近来解释一下!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017730 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved