黑马程序员技术交流社区

标题: 关于三目运算 [打印本页]

作者: 紮西诺尔布    时间: 2015-4-12 20:55
标题: 关于三目运算
#include <stdio.h>
main()
{
    int a=5, b=4, c=6, d;
    printf(”%d\n”, d=a>b? a>c?a:c :b);
}
结果???如何运算的,请讲解!!!!!
作者: LoseMyCat    时间: 2015-4-12 22:33
赋值运算符的优先级比三目运算符低,而三目运算符为右结合性,所以这个表达式可以理解为这样:
d = ( a > b ? (a > c ? a : c) : b )
所以最后结果应该为6

作者: 举举手    时间: 2015-4-12 23:15
a>b?(a>c?a:c):b按照这个顺序:先判断a>b是不是真,结果是真,就要去找所对应的最后一个":",最后一个冒号前面&&第一个问号后面的内容就是当前面a>b为真时所取得值
作者: 张红兴    时间: 2015-4-12 23:19
运算符的优先级(从高到低)
括号
正负号
自增自减,非
乘除,取余
加减
移位运算
大小关系
相等关系
按位与
按位异或
按位或
逻辑与
逻辑或
条件运算
赋值运算
位赋值运算
作者: 弥风冻雪    时间: 2015-4-13 00:02
你这样写,别人怎么看,实际开发中都是带小括号的或者分开写,没有这样写的...
作者: 丶浩浩丶    时间: 2015-4-13 00:17
会被炒鱿鱼的
作者: tyisbest    时间: 2015-4-13 01:44
d = ( a > b ? (a > c ? a : c) : b )先判断a>b的真假,因为a>b,所以表达式的值是(a > c ? a : c) .然后这个值是多少呢?判断a>c的真假,因为wei'zhen为假,所以返回c的值,所以表达式的值为c的值,所以d=6!!
作者: 梁奎元    时间: 2015-4-13 18:19
d=a>b?(a>c?a:c) :b    结果d = c =6
作者: 紮西诺尔布    时间: 2015-4-13 23:56
LoseMyCat 发表于 2015-4-12 22:33
赋值运算符的优先级比三目运算符低,而三目运算符为右结合性,所以这个表达式可以理解为这样:
d = ( a > b ...

非常感谢!!!!!you are great!!!!!!!!!!!继续努力加油吧!!!!!!
作者: 花短裤的夏天    时间: 2015-4-14 00:02
可以从后往前推,b前有冒号,但是c前也有冒号,所以(a>c?a:b)是一个整体
作者: 董zhx    时间: 2015-4-14 00:03
这个以后用的少,会了就行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2