C中不使用临时变量如何交换两个变量?

[复制链接]
5250|24
古道热肠 发表于 2009-9-11 10:46 | 显示全部楼层
哈哈,很有趣,详细的分析过程如下,
x=x^y;     //将y的值寄存生到X中形成XY杂合体
y=x^y;     //将XY杂合体与纯洁的Y通过异或操作得到纯洁的X并送给Y,此时Y等于纯洁的X的了
x=x^y;     //将XY杂合体与纯洁的X利用异或还原成纯洁的Y并送给X,此时X等于纯洁的Y了

哈哈,与特工加密手法类似.;P
古道热肠 发表于 2009-9-11 10:46 | 显示全部楼层
哈哈,很有趣,详细的分析过程如下,
x=x^y;     //将y的值寄存生到X中形成XY杂合体
y=x^y;     //将XY杂合体与纯洁的Y通过异或操作得到纯洁的X并送给Y,此时Y等于纯洁的X的了
x=x^y;     //将XY杂合体与纯洁的X利用异或还原成纯洁的Y并送给X,此时X等于纯洁的Y了

哈哈,与特工加密手法类似.;P
HWM 发表于 2009-9-11 10:46 | 显示全部楼层
本帖最后由 HWM 于 2009-9-11 10:54 编辑

22楼:

那是个“宏微”观视角问题。这里说的是宏观视角,不考虑每步所具体使用的物理寄存器(这些寄存器用完便丢掉了)。

注意:用此类“算法”的机理是每步都未损失其内含的“信息量”
HWM 发表于 2009-9-11 10:53 | 显示全部楼层
另外,通常采用的“三角传递”明显存在着信息冗余(每次复制后),这就是为何会多出一个单元的原因。但也许这才是高效且更符合CPU本性的。
李冬发 发表于 2009-9-11 11:44 | 显示全部楼层
看上去可以,可有效位数减少了1位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部