搜索
查看: 1121|回复: 5
打印 上一主题 下一主题

变量的直调换

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-22 16:12:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
int a,b;
    scanf("%d %d",&a,&b);
    a=b-a;
    b=b-a;
    a=b+a;
    printf("%d\n%d",a,b);

搞不清楚这个,
为什a和b在最后输出的时候可以调换过来

沙发
发表于 2013-8-22 16:29:47 | 只看该作者
自己演算一遍就知道了

另外这个方法有bug,是几十年前的写法,不去搞清楚也没什么问题
板凳
 楼主| 发表于 2013-8-22 16:32:20 | 只看该作者
rosynirvana 发表于 2013-8-22 16:29
自己演算一遍就知道了

另外这个方法有bug,是几十年前的写法,不去搞清楚也没什么问题

我写在上面的时候没BUG撒,具体是啥,说下撒
地板
发表于 2013-8-22 17:00:31 | 只看该作者
fjjjnh 发表于 2013-8-22 16:32
我写在上面的时候没BUG撒,具体是啥,说下撒

第一步 a=b-a的时候,如果b很小,a很大,那么就可能溢出
有符号数的溢出是没有定义的,所以可能造成未知的结果,也可能正常工作,也可能得到错误的值,也可能让程序崩溃

不用中间变量交换的正确写法是
a = b^a
b = a^b
a = a^b
这样就没有溢出的问题了,但是只能用在integral type上面

这种写法的出现原因是很久很久之前RAM很贵所以能省一个变量就省一个变量,在现在,已经完全没意义了
5#
发表于 2013-8-22 19:51:18 | 只看该作者
学习了!

6#
发表于 2013-8-22 20:22:11 | 只看该作者
不知道b^a是什么。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表