打印

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

[复制链接]
3422|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyboy|  楼主 | 2009-9-9 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
常来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;

使用特权

评论回复
5
虾军师| | 2009-9-9 21:47 | 只看该作者
to:四楼
学习了

我得到的结论是:
某个地址上的数a被另一个数b连续异或两次,那么这个地址的值a将改写为数值b。

使用特权

评论回复
6
音乐乐乐| | 2009-9-10 06:54 | 只看该作者
x=x^y;
y=x^y;
x=x^y;
jxmemail 发表于 2009-9-9 19:55


:dizzy:

使用特权

评论回复
7
pigeon0411| | 2009-9-10 08:41 | 只看该作者
to:四楼
学习了

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


太牛B了!

使用特权

评论回复
8
大道至简| | 2009-9-10 08:50 | 只看该作者
楼主这个命题,是个伪命题

使用特权

评论回复
9
礦ision| | 2009-9-10 08:58 | 只看该作者
学习

使用特权

评论回复
10
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;

自己比比就知道了

使用特权

评论回复
11
杜专| | 2009-9-10 12:02 | 只看该作者

使用特权

评论回复
12
mbutterfly| | 2009-9-10 12:29 | 只看该作者
左右相对谁的?

使用特权

评论回复
13
oldzhang| | 2009-9-10 12:47 | 只看该作者
高家庄,实在是高

使用特权

评论回复
14
因特网用户| | 2009-9-10 12:53 | 只看该作者
mark

使用特权

评论回复
15
mytempid| | 2009-9-10 14:52 | 只看该作者
路子不对啊:)
不过确实是高

使用特权

评论回复
16
ruiwei0201| | 2009-9-10 16:04 | 只看该作者
有才。。。

使用特权

评论回复
17
箫笑| | 2009-9-10 16:09 | 只看该作者
这个是学校里讲C语言位操作的时候就出过的题目,异或操作,不过感觉很厉害,最开始不知道是怎么想到这么做的,

使用特权

评论回复
18
虾军师| | 2009-9-11 08:43 | 只看该作者
14楼的方法可以用
只是当X+Y要是溢出了
那就出错了
14# flmyueyang

使用特权

评论回复
19
xwj| | 2009-9-11 09:12 | 只看该作者
14楼的方法可以用
只是当X+Y要是溢出了
那就出错了
14# flmyueyang
虾军师 发表于 2009-9-11 08:43


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

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


当然,这个贴只是思路的讨论,太过计较BUG好像没必要;P

使用特权

评论回复
20
inter_zhou| | 2009-9-11 10:37 | 只看该作者
理论上都是不可能的,实际怎么可以做到。14楼和4楼的貌似可以,但是都是错的。只是表面上没有用其他内存,实际上编译器编译之后还是用了其他内存。
把个比方吧,一个瓶子装了水,一个瓶子装了牛奶。把两个瓶子里面的东西互换一下。不需要借助其他容器可以吗?当然不行

这种哗众取巧的态度不可取

使用特权

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

本版积分规则

101

主题

356

帖子

0

粉丝