| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2033 人关注过本帖
标题:求解,高手进
只看楼主 加入收藏
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
既然 对 a= (b= ( c=d))) 没意见 那就好说了

编译器对 变量值的读取顺序可能会不同,但对于操作符的运算顺序是 不会变的

也就是说  有可能 先计算出 a=b 中变量的值,但不会执行赋值运算。
编译器对一个优先级内的运算顺序是明确的,如果两个优先级相同,那么是否先执行哪个是未定义的

比如 (a^=b)+(b^=c)   这个里面 先计算括号内的哪个 是未定仪的

但对于a= (b= ( c=d)))  几个赋值运算并不在同一级别内,所以 肯定是先计算c=d,把值赋给b,如果已经计算过b的值,那么就会刷新了

我在VS VC Linux下的gCC还有TC 这样赋值都没问题  

这个不属于基础吧,而且此问题并非我没有考虑过的,得出的结论就是可以交换
几个主流编译器没有歧义可以我才会用的

How are you 怎么是你?
How old are you   怎么老是你?
2008-05-20 10:02
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS:
首先向你抱歉,那段代码未定义,和运算顺序无关。最大的愿意是,一行代码两个顺序点之间,两次改变一个变量的值。
具体请看我上面给出的资料。已经有人反应过了这行代码在有些编译器上面是无效的。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-20 15:01
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
汗`````  抱歉虾米   你能把问题说出来 是对我有好处的啊

多墨迹才能明白其中原因啊~~~

b ^= a ^= b,a^=b;

这样的话 相信在任何编译器上都能交换了

一个表达式出来 出错  确实有理由的

How are you 怎么是你?
How old are you   怎么老是你?
2008-05-20 18:40
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
恩,应该是可以的吧……不过因为学C++的原因,我还是喜欢三赋值的方法交换,毕竟不止是适合整型,而且适合任何类型,哈哈~~~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-20 19:07
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
这个程序大可不必写这么多代码的

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-05-20 19:10
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
话说,其实挺赞yxw的代码的,写的真不错~~~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-20 19:15
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
我会被吐沫星淹死的````  

How are you 怎么是你?
How old are you   怎么老是你?
2008-05-20 20:50
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
位运算只支持int和char。。还是交换好点。。。代码风格和翅膀的很像。。呵呵

学习需要安静。。海盗要重新来过。。
2008-05-20 20:56
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
广陵:
1 无错分析,是在真实的代码中使用的,而不是做题,题目已经给定数字不超过八位,就不需要再去判断。当然你加个断言也无可厚非。如果在OJ上,你随便输出多余消息,是要算WA的。
2 题目只有一个“输出”,所以只需要输出一个数字就可以了。对题意的理解很重要。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-20 22:25
jxt598598
Rank: 1
等 级:新手上路
帖 子:149
专家分:0
注 册:2007-6-13
收藏
得分:0 
回复 12# 的帖子
可不可以直接写 *(p+i)>=10  而不用>=58?

[[it] 本帖最后由 jxt598598 于 2008-5-20 22:28 编辑 [/it]]

qq:304742297
2008-05-20 22:26
快速回复:求解,高手进
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016755 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved