免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: rollin7

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

论坛徽章:
0
发表于 2009-07-23 18:54 |显示全部楼层
而用^这个版本的可以支持32位机器上几乎全部类型的交换(只要字节数相同,完全可以交换)


怎解? char和char好像就不行啊。

论坛徽章:
0
发表于 2009-07-23 18:56 |显示全部楼层
原帖由 junyang296 于 2009-7-23 18:54 发表


怎解? char和char好像就不行啊。


自己测试时参数也错了,呵呵。可以的。

论坛徽章:
0
发表于 2009-07-25 19:58 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2009-07-25 22:09 |显示全部楼层
原帖由 fantasy_he 于 2009-7-17 22:52 发表
更经典的是:
y=x+y-(x=(x+y-x));


这个要考虑溢出的问题....

还有这段代码,不一定得到你需要的结果,

在表达式中对y进行赋值,又读了y两次...
类似于v[++i] = i;
...这里表达式的求值顺序是不确定的,依赖于具体平台和实现

论坛徽章:
0
发表于 2009-07-27 15:49 |显示全部楼层

回复 #1 rollin7 的帖子

论坛徽章:
0
发表于 2009-07-27 20:26 |显示全部楼层

回复 #1 rollin7 的帖子

论坛徽章:
0
发表于 2009-07-30 10:53 |显示全部楼层
原帖由 rollin7 于 2009-7-17 19:10 发表
今天看到异或的属性一节,看到一段代码,自认为很经典,贴出来分享下:

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

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


这个还好吧,也不是很经典,其实用一个表达式就足够了。
x ^= y ^= x ^= y;
如果编译出错的话,就只好分割成两句了
y ^= x ^= y;
x ^= y;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP