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

[复制链接]
5249|24
 楼主| zyboy 发表于 2009-9-9 17:00 | 显示全部楼层 |阅读模式
在CSDN上看到的,有人说当初由于内存太小才想出这个怪招,不知道是不是真的。实际是无源之水是不存在的,只是用了内部寄存器做了中介。挺好玩的
常来21IC 发表于 2009-9-9 17:41 | 显示全部楼层
不使用临时变量?

贴上代码肯定挨批...
mohanwei 发表于 2009-9-9 17:53 | 显示全部楼层
估计是认为寄存器不算变量……
jxmemail 发表于 2009-9-9 19:55 | 显示全部楼层
x=x^y;
y=x^y;
x=x^y;
虾军师 发表于 2009-9-9 21:47 | 显示全部楼层
to:四楼
学习了

我得到的结论是:
某个地址上的数a被另一个数b连续异或两次,那么这个地址的值a将改写为数值b。
音乐乐乐 发表于 2009-9-10 06:54 | 显示全部楼层
x=x^y;
y=x^y;
x=x^y;
jxmemail 发表于 2009-9-9 19:55


:dizzy:
pigeon0411 发表于 2009-9-10 08:41 | 显示全部楼层
to:四楼
学习了

我得到的结论是:
某个地址上的数a被另一个数b连续异或两次,那么这个地址的值a将改写为数值b。
虾军师 发表于 2009-9-9 21:47


太牛B了!
大道至简 发表于 2009-9-10 08:50 | 显示全部楼层
楼主这个命题,是个伪命题
礦ision 发表于 2009-9-10 08:58 | 显示全部楼层
icecut 发表于 2009-9-10 09:02 | 显示全部楼层
to:四楼
学习了

我得到的结论是:
某个地址上的数a被另一个数b连续异或两次,那么这个地址的值a将改写为数值b。
虾军师 发表于 2009-9-9 21:47


小虾错了....
a = a^b^b;

关键地方在下面:
x=x^y;
y=x^y;
x=x^y;

x=x^y;
x=x^y;
y=x^y;

自己比比就知道了
杜专 发表于 2009-9-10 12:02 | 显示全部楼层
mbutterfly 发表于 2009-9-10 12:29 | 显示全部楼层
左右相对谁的?
oldzhang 发表于 2009-9-10 12:47 | 显示全部楼层
高家庄,实在是高
因特网用户 发表于 2009-9-10 12:53 | 显示全部楼层
mytempid 发表于 2009-9-10 14:52 | 显示全部楼层
路子不对啊:)
不过确实是高
ruiwei0201 发表于 2009-9-10 16:04 | 显示全部楼层
有才。。。
箫笑 发表于 2009-9-10 16:09 | 显示全部楼层
这个是学校里讲C语言位操作的时候就出过的题目,异或操作,不过感觉很厉害,最开始不知道是怎么想到这么做的,
虾军师 发表于 2009-9-11 08:43 | 显示全部楼层
14楼的方法可以用
只是当X+Y要是溢出了
那就出错了
14# flmyueyang
xwj 发表于 2009-9-11 09:12 | 显示全部楼层
14楼的方法可以用
只是当X+Y要是溢出了
那就出错了
14# flmyueyang
虾军师 发表于 2009-9-11 08:43


——对于整形,一般的CPU就算溢出也不会出错的,因为可以自动进位、借位

而DSP就要小心了,因为DSP大多都有个饱和模式,要避免这种情况;
而对于浮点,加减后则极可能会变。


当然,这个贴只是思路的讨论,太过计较BUG好像没必要;P
inter_zhou 发表于 2009-9-11 10:37 | 显示全部楼层
理论上都是不可能的,实际怎么可以做到。14楼和4楼的貌似可以,但是都是错的。只是表面上没有用其他内存,实际上编译器编译之后还是用了其他内存。
把个比方吧,一个瓶子装了水,一个瓶子装了牛奶。把两个瓶子里面的东西互换一下。不需要借助其他容器可以吗?当然不行

这种哗众取巧的态度不可取
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

356

帖子

0

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