| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1104 人关注过本帖
标题:关于条件表达式结合方向“自右至左”如何理解?
只看楼主 加入收藏
new_hand
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2009-6-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
关于条件表达式结合方向“自右至左”如何理解?
#include <stdio.h>
void main()
{
    int a=10,b=20,c,d=15;
     c=(a>b)?a:((b>d)?b++:d++);
    printf("%d   %d   %d\n",c,b,d);
}
输出  20  21  15
若换为  c=(a<b)?a:((b>d)?b++:d++);
输出  10  20  15

难道不是先计算左边的式子吗?  自右至左啊?
搜索更多相关主题的帖子: 条件表达式 
2009-08-24 10:33
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:8 
优先级的问题
2009-08-24 10:48
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:0 
它直接短路运算了,后面什么b++,d++都没运
a<b成立它就直接输出了
2009-08-24 10:52
new_hand
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2009-6-25
收藏
得分:0 
回复 3楼 CCVC果冻爽
怎么不是先判断b>d,再判断a与b的大小?
什么叫自右至左结合?
2009-08-24 10:56
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:0 
为什么要先判断b>d呢?a与b上也有括号啊,建议你去看下优先级那章。
2009-08-24 11:04
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:12 
c=(a>b)?a:((b>d)?b++:d++);是从左运算的,这式子说明不了自右至左,
a=10,b=20,c,d=15
a>b 假,就到((b>d)?b++:d++);
b>d 真,就到b++
c=b++
到下一语句printf函数时,c=20,b=21,
c=(a>b)?a:((b>d)?b++:d++);
运行完上面的语句,b自增1,这正常呀.
@
给你一个自右至左的例子,(在TC中,随编译器不同结果也不同)
main()
{
 n=2;
 printf("%d %d\n",n++,n++);
}
你看上面这输出会认为输出是
2 3
但结果是:
3 2
这里就可以看出从右之左运算,先算右边的n++,到左边的n++时,n值为3.
但printf函输出还是从左到右输出,所以结果是:3 2
@
这种自右至左的算法,看得明白就好,看不明白不要太刻意去研究,编译器不同,研究也不同.
这样的表达式编程中不会用到,也要尽量避免,

努力—前进—变老—退休—入土
2009-08-24 11:09
CCVC果冻爽
Rank: 4
等 级:业余侠客
帖 子:116
专家分:209
注 册:2009-7-31
收藏
得分:0 
很明确的告诉你条件运算符是从左到右的
2009-08-24 11:19
new_hand
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2009-6-25
收藏
得分:0 
我是想知道  自左至右   到底是什么意思????
2009-08-25 17:48
快速回复:关于条件表达式结合方向“自右至左”如何理解?
数据加载中...
 
   



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

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