发新帖我要提问
12
返回列表
打印

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

[复制链接]
楼主: zyboy
手机看帖
扫描二维码
随时随地手机跟帖
21
古道热肠| | 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

使用特权

评论回复
22
古道热肠| | 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

使用特权

评论回复
23
HWM| | 2009-9-11 10:46 | 只看该作者
本帖最后由 HWM 于 2009-9-11 10:54 编辑

22楼:

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

注意:用此类“算法”的机理是每步都未损失其内含的“信息量”

使用特权

评论回复
24
HWM| | 2009-9-11 10:53 | 只看该作者
另外,通常采用的“三角传递”明显存在着信息冗余(每次复制后),这就是为何会多出一个单元的原因。但也许这才是高效且更符合CPU本性的。

使用特权

评论回复
25
李冬发| | 2009-9-11 11:44 | 只看该作者
看上去可以,可有效位数减少了1位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则