设a=1,b=2,c=3,d=4 则表达式: a<=b?a:c<=d?a:d 结果是1 请问这结果是怎么来的呢?

kjclanguage 2005-08-02 11:27:22
设a=1,b=2,c=3,d=4 则表达式: a<=b?a:c<=d?a:d 结果是1 请问这结果是怎么来的呢?
...全文
7554 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
prgmBaggio 2005-08-06
  • 打赏
  • 举报
回复
(a<=b)?(a):(c<=d?a:d)
tygfr 2005-08-06
  • 打赏
  • 举报
回复
先把逻辑运算和算术运算这两个基本的概念搞清楚再说
lxk_cool 2005-08-06
  • 打赏
  • 举报
回复
关于?:的用法,看看书吧
K 2005-08-06
  • 打赏
  • 举报
回复
看看基础吧
bombwang 2005-08-06
  • 打赏
  • 举报
回复
(a<=b)?a:(c<=d?a:d)
自己慢慢算
llf_hust 2005-08-06
  • 打赏
  • 举报
回复
认真看书,把基础打好
zsd1101897 2005-08-06
  • 打赏
  • 举报
回复 14
设a=1,b=2,c=3,d=4 则表达式: a<=b?a:c<=d?a:d 结果是1 请问这结果是怎么来的呢?

看这道题 只要分析两个嘛 很简单
1运算符的优先级
2运算符的结合方向
这道题只涉及2个运算符号
1 ?: 条件运算符 结合方向 从右至左
2 <= 关系运算符 结合方向 从左至右
3关系运算符的优先级大于条件运算符
所以在解这道题的时候按这个顺序看可能容易理解点
1 先解答a<=b 得到答案为1
此时这条式可以简化为 1?a:c<=d?a:d
2解答c<=d 得到答案为1
此时这条式可以简化为 1?a:1?a:b
3由于条件运算符的结合方向是从右到左
所以先算后面的那个1?a:b部分 得到答案为1(就是a)
此时这条式可以简化为 1?a:1
4呵呵 ,这个当然也就是a啦~也就是1了
思考问题应该有点条理性!~建议楼主以后在问问题前应该仔细思考
gogdo 2005-08-04
  • 打赏
  • 举报
回复
问题的解决方法是你按运算符的优先级的顺序加上括号,问题就变得很清楚了。
qybao 2005-08-03
  • 打赏
  • 举报
回复
可以用以下的方法测试编译器是从左算还是从右算
k=0;
a<=b?a:(k=c<=d?a:d)
printf("k=%d",k);
如果k值不是0,就说明是从右算的,否则就是从左算的
qybao 2005-08-03
  • 打赏
  • 举报
回复 1
a<=b?a:c<=d?a:d
首先判断条件a<=b,如果成立则取a的值,不成立则取(c<=d?a:d)的值
对于c<=d?a:d,先判断c<=d,如果成立则取a的值,不成立则取d的值
所以,很明显,你的表达式里一开始a<=b条件就成立了,直接就取a的值了,a的值就是1,所以结果是1
********************************************
上面是从左边开始算的

从右算也是一样的结果,毕竟从右算最后也要走到a<=b这一步判断,结果很明显了
一般所谓的从左,从右算,要看编译器的,不同的编译器运算方式也不一样,但不管怎样,只要知道运算的逻辑原理就可以了

xuanwenchao 2005-08-03
  • 打赏
  • 举报
回复
设a=1,b=2,c=3,d=4 则表达式: a<=b?a:c<=d?a:d 结果是1 请问这结果是怎么来的呢?

a<=b ? a : (c<=d?a:d)
a<=b成立则返回a的值不成立则返回(c<=d?a:d)的值,所以得1
jighrfgdd 2005-08-03
  • 打赏
  • 举报
回复
回复人: qybao(阿宝) ( ) 信誉:100 2005-8-2 23:36:43 得分: 0



a<=b?a:c<=d?a:d
首先判断条件a<=b,如果成立则取a的值,不成立则取(c<=d?a:d)的值
对于c<=d?a:d,先判断c<=d,如果成立则取a的值,不成立则取d的值
所以,很明显,你的表达式里一开始a<=b条件就成立了,直接就取a的值了,a的值就是1,所以结果是1
********************************************
上面是从左边开始算的


回复人: jixingzhong(瞌睡虫) ( ) 信誉:100 2005-8-3 7:41:09 得分: 0



我想楼主是不是写错了 ?


可能原来的题目是


a<=b?a:c<=d?c:d 而不是 a<=b?a:c<=d?a:d 吧

(不过结果一样)

这里的问题,

关键的是 三目运算符 的结合方向 ,

除了 单目运算符 以外

还有 这个 三目运算符 是 右结合 的

所谓 右结合 ,是说有多重该运算符号的时候

系统会优先满足式子右边的

比如楼主的问题 a<=b?a:c<=d?a:d ==>a<=b?a:(c<=d?a:d)

类似的 单目运算符号 也一样

比如 +++i ==> +(++i)



楼主要多加注意

这些很容易让人迷糊的



**********************************
这位讲是右边开始算的



到底哪个对呢?我学的是它有右结合性的





jsjjms 2005-08-03
  • 打赏
  • 举报
回复
设a=1,b=2,c=3,d=4 则表达式: a<=b?a:c<=d?a:d 结果是1 请问这结果是怎么来的呢?
------------------------------------------------------------------------------

a<=b?a:c --> if (a<=b) then tmp=a; else tmp =c;

这种嵌套写法 加上括号就清楚多了.没有括号

就要清楚运算符的优先级
copygirl 2005-08-03
  • 打赏
  • 举报
回复
设a=1,b=2,c=3,d=4
a<=b?a:(c<=d?a:d)

因为a<=b,所以等式取a的值1
afx_swallow 2005-08-03
  • 打赏
  • 举报
回复
转新手乐园
jixingzhong 2005-08-03
  • 打赏
  • 举报
回复
我想楼主是不是写错了 ?


可能原来的题目是


a<=b?a:c<=d?c:d 而不是 a<=b?a:c<=d?a:d 吧

(不过结果一样)

这里的问题,

关键的是 三目运算符 的结合方向 ,

除了 单目运算符 以外

还有 这个 三目运算符 是 右结合 的

所谓 右结合 ,是说有多重该运算符号的时候

系统会优先满足式子右边的

比如楼主的问题 a<=b?a:c<=d?a:d ==>a<=b?a:(c<=d?a:d)

类似的 单目运算符号 也一样

比如 +++i ==> +(++i)



楼主要多加注意

这些很容易让人迷糊的
apollon_hhy 2005-08-03
  • 打赏
  • 举报
回复
我觉得 楼主首先 应该清楚 ? : 三目运算符的用法
a ? b : c 如果 a 是 true 则 b ,否则 a 为false 则 c

a<=b?a:c<=d?a:d 相当于 a<=b ? a : (c<=d ? a : d)
a=1,b=2,c=3,d=4 显然 a<=b 为true ;
jighrfgdd 2005-08-03
  • 打赏
  • 举报
回复
tc是从从左算还是从右算?
qybao 2005-08-02
  • 打赏
  • 举报
回复 1
a<=b?a:c<=d?a:d
首先判断条件a<=b,如果成立则取a的值,不成立则取(c<=d?a:d)的值
对于c<=d?a:d,先判断c<=d,如果成立则取a的值,不成立则取d的值
所以,很明显,你的表达式里一开始a<=b条件就成立了,直接就取a的值了,a的值就是1,所以结果是1
boxban 2005-08-02
  • 打赏
  • 举报
回复
这个~~~~~~~~~~
无语
加载更多回复(2)

70,013

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧