免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: rollin7
打印 上一主题 下一主题

[C] 交换两变量的值 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-07-18 01:11 |只看该作者
原帖由 rollin7 于 2009-7-17 19:10 发表
今天看到异或的属性一节,看到一段代码,自认为很经典,贴出来分享下:

void inplace_swap(int *x,int *y)
{
    *x = *x ^ *y;
    *y = *x ^ *y;
    *x = *x ^ *y;
}

(PS 书上原话:这种交换方式 ...

前不久在做培训老师出的题,有同学这么做

不过用的是#define SWAP(a,b) {a^=b;b^=a;a^=b;}

[ 本帖最后由 aaaaa5aa 于 2009-7-18 01:12 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2009-07-18 09:47 |只看该作者
是的,以前为了耍酷,就是这么写交换的...那个项目大几万行代码,debug了好久才发现是这个JB问题....
现在很老实的
tmp = a;
a = b;
b = tmp;

论坛徽章:
0
13 [报告]
发表于 2009-07-18 13:08 |只看该作者
原帖由 OwnWaterloo 于 2009-7-17 22:44 发表


以及显摆


这段代码是在讲“异或”那一节的例子,仅仅是用来说明 “异或”的属性的。

论坛徽章:
0
14 [报告]
发表于 2009-07-18 13:12 |只看该作者
原帖由 lyreopera 于 2009-7-17 23:24 发表
假如交换的值相等,就出问题了


恕我愚昧,想不出有什么问题

论坛徽章:
0
15 [报告]
发表于 2009-07-18 13:14 |只看该作者
原帖由 fantasy_he 于 2009-7-17 22:52 发表
更经典的是:
y=x+y-(x=(x+y-x));


得考虑溢出的问题吧?

论坛徽章:
0
16 [报告]
发表于 2009-07-18 17:13 |只看该作者
看不懂,不知道怎麼來的。

论坛徽章:
0
17 [报告]
发表于 2009-07-18 17:36 |只看该作者
找抽
汇编代码里面照样会交换

[ 本帖最后由 churchmice 于 2009-7-18 17:52 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2009-07-18 17:44 |只看该作者
原帖由 churchmice 于 2009-7-18 17:36 发表
找抽
汇编代码里面照样会交换
而且两个数一样就挂了


两个数一样的话如何挂? 举个例出来

论坛徽章:
0
19 [报告]
发表于 2009-07-18 17:52 |只看该作者

回复 #18 rollin7 的帖子

没看仔细
思维定势了下
相等不会挂
不好意思

论坛徽章:
0
20 [报告]
发表于 2009-07-18 17:56 |只看该作者
看出来了,不怕值一样,就怕地址一样,如 inplace_swap(a,a)就完蛋了。

这段代码书原书上所讲,只能用于分析,不提倡用于实际应用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP