| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4784 人关注过本帖
标题:条件运算符的结合性(右)谢谢此贴己完成.搞清勒
只看楼主 加入收藏
gxikings
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2009-10-29
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:14 
条件运算符的结合性(右)谢谢此贴己完成.搞清勒
    有没有人能帮我讲解一下条件运算符的结合性???  我看过很多网站上的相关资料,可是感觉没有一个能解释的清楚,明白的.

希望有高人帮我解答一下,小弟感激不尽!!

[ 本帖最后由 gxikings 于 2009-10-29 15:46 编辑 ]
搜索更多相关主题的帖子: 结合 搞清 条件 贴己 运算符 
2009-10-29 10:53
gxikings
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2009-10-29
收藏
得分:0 
例如:?a:b?c:d
2009-10-29 10:53
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:5 
x?a:b?c:d
条件运算符是三目运算符,结合方向为自右至左。
以上面的例子来说:
先看b?c:d的结果:若b为真结果为c,否者为d,记b?c:d的结果为z,则x?a:b?c:d等价为x?a:z。若x为真,结果为a,否则为z。
2009-10-29 11:00
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
这样的问题直接看书上的讲解,看看例题就OK了,上网查越查越乱
    楼上正解

我可好玩啦...不信你玩玩^_^
2009-10-29 13:32
gxikings
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2009-10-29
收藏
得分:0 
回复 3楼 m456m654
如此的运算我也知道,只是算出的结果,确不是这个样子的.

#include <stdio.h>
void main()
{
  int a=1,b=2,c=3,d=4,e=5,f=6;
  printf("%d\n",a?b:c=0?d=0:e=0);
  printf("%d %d %d %d %d",a,b,c,d,e);
}

按3楼的说话,如果这样的话,结果应该是  
  2
  1 2 0 4 0

可是实际的结果确是
 2
 1 2 3 4 5
2009-10-29 14:05
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:15 
以下是引用gxikings在2009-10-29 14:05:26的发言:

如此的运算我也知道,只是算出的结果,确不是这个样子的.

#include <stdio.h>
void main()
{
  int a=1,b=2,c=3,d=4,e=5,f=6;
  printf("%d\n",a?b:c=0?d=0:e=0);
  printf("%d %d %d %d %d",a,b,c,d,e);
}

按3楼的说 ...
你的代码我2个编译器都不能通过,都报错。
细节问题。
程序代码:
#include <stdio.h>
void main()
{
  int a=1,b=2,c=3,d=4,e=5;
  printf("%d\n",a?b:c?(d=0):(e=0));
  printf("%d %d %d %d %d",a,b,c,d,e);
  getch();
}

第一,d=0,e=0要用括号括起来;
第二,c=0是赋值表达式,不是逻辑判断值。(ps:if(0)对;if(c==0)也对;if(c=0),sorry,错)
第三,你的f定义多余,或者你是想接受第一个输出的值?
第四,你的代码判断顺序(以我修改的算)是先判断C,根据C得到的逻辑值,判断是执行d=0还是e=0,然后再根据a的逻辑值判断是执行b还是执行c。因为a是真,直接执行b了,c的后面代码就不考虑了,这样的“潜规则”类似判断&&和||,虽然语法顺序是自右向左,但因为前一项的值已经能确定结果了,所以后面是什么都不需要计算了。

我可好玩啦...不信你玩玩^_^
2009-10-29 15:10
gxikings
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2009-10-29
收藏
得分:0 
回复 6楼 pgy
这个我知道,所为的短路效应.但是..按照自右向左的结合性,我还是不懂为什么是这样的结果...


这个问题真的是让人头疼,
2009-10-29 15:21
gxikings
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2009-10-29
收藏
得分:0 
回复 6楼 pgy
如果c=0,这个是成立的.  这个表达式的值是0,也就是"假",所以程序段是不会出错的.
2009-10-29 15:22
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 8楼 gxikings
哦,你这个可以通过编译,我理解错了你的意义
你的问题可以想想为什么int a=b=c=0(非标准语言哈)
(a=1)||(b=2)&&(c=3)输出结果是1,0,0(ps:&&优先级高于||)。
    我没学过这样的标准,只是自己结合理论和经验得出应该这样理解,而且我在所有面对的应用中遇到这样的问题的时候,我得出我的想法是对的
ps:if(c=0)这样的判断总觉得别扭,不规范。运用到条件判断语句的时候,编译器虽然都能编译成功,但都报出“警告 22.c 4: 可能是不正确的赋值在 main 函数中”。

[ 本帖最后由 pgy 于 2009-10-29 15:38 编辑 ]

我可好玩啦...不信你玩玩^_^
2009-10-29 15:36
gxikings
Rank: 1
等 级:新手上路
帖 子:11
专家分:3
注 册:2009-10-29
收藏
得分:0 
谢谢你,分己经给你了,这问题我也搞清楚了 .

a?b:c=0?d=0:e=0   根据结合方向,我们能区分出   c=0?d=0:e=0是一个条件运算符,而a ? ( b ) : (c=0?d=0:e=0)  是一个. 如果按自左往右的方式来看这个表达式,那么将成为   (a?b:c=0):d=0:e=0;了.所以,还是自右向左的结合性.谢谢你们.再次感谢
2009-10-29 15:44
快速回复:条件运算符的结合性(右)谢谢此贴己完成.搞清勒
数据加载中...
 
   



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

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