六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 41|回复: 0

不用中间变量交换数据

[复制链接]

升级  4.67%

15

主题

15

主题

15

主题

秀才

Rank: 2

积分
57
 楼主| 发表于 2013-1-26 12:33:50 | 显示全部楼层 |阅读模式
那种加加减减的方法其实不对。因为缩小了数据范围。
a1=a1+a2;     //此时a1为a1与a2之和
a2=a1-a2;     //此时a2=a1
a1=a1-a2;     //此时a1=a2

位操作符号^(异或)有个性质:
a^a=0;
0^a=a;
所以a^a^b=b;
所以正确的交换如下:
void   swap   (int&   _1,int&   _2)
{
            _1^=_2^=_1^=_2
return   
}


^=结合的方向是从右向左。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表