黑马程序员技术交流社区

标题: 好复杂的简单问题哦 [打印本页]

作者: 郑朝明    时间: 2013-1-17 20:35
标题: 好复杂的简单问题哦
本帖最后由 ™郑老 于 2013-1-17 20:37 编辑

max=a>b?a:b;//这是什么东东谁帮我翻译成中文意思
max=a/b?a:b;//报错这是为什么
b=-a++;//程序是怎么计算这东东的(是先先++还是先-a再++)
作者: 唐晓    时间: 2013-1-17 20:49
max=a>b?a:b
max的值是a和b比大小,谁大max的值就是谁
max=a/b?a:b;//没有这么写的,语法问题。
b=-a++;++的运算级别比-高,所以先执行a++,但是此时a的值没有变化,是运行后在自增1,下次调用a的返回值就是a+1.
作者: 罗志强    时间: 2013-1-17 20:49
本帖最后由 ShowStyle 于 2013-1-17 20:56 编辑

max=a>b?a:b;//这个是三元表达式,意思就是:如果a>b成立,则将a赋值给max,否则将b赋值给max;
max=a/b?a:b;//报错这是为什么?因为你这个表达式是不正确的,max=(a/b)?a:b;  括号中的运算结果必须是布尔值,所以你这个是不成立的
b=-a++;//程序是怎么计算这东东的(是先先++还是先-a再++)这个问题,我也需要求解,等等我翻翻书,在告诉你

刚刚翻书了!++ ,--的优先级是最低的,=号还在++之前,所以你这个表达式里面的++是没效果的

作者: 许庭洲    时间: 2013-1-17 20:49
1. max=a>b?a:b;//若a大于b为真,则将a的值赋值给变量max;若a大于b的值为假,则将b的值赋值给变量max;
2. max=a/b?a:b;//若a除以b的结果不为0,则将a的值赋值给变量max,若a除以b的值为0,则将b的值赋值给变量max;
3. b=-a++;//等价于b=b-a++;同时也等价于b=b-a;这里的++没起作用。
作者: 李 玉林    时间: 2013-1-17 21:14
三元运算符的前部分应该是关系运算符,max=a/b?a:b;是错误的   复合运算符包括:+=,-=,*=,/=,b+=a同b=b+a  其他类同
作者: 黑马刘俊    时间: 2013-1-17 22:10
1. max=a>b?a:b;   
     赋值的优先级最低,所以先算后面的
    等同于max = (a>b?a:b)   三目运算符的计算     若a大于b为真,则将a的值赋值给变量max;若a大于b的值为假,则将b的值赋值给变量max;

2. max=a/b?a:b;、这个宝座的原因在于, 三目运算问号前面的表达式的值必须是个boolean类型的, a/b你这算出来不是个boolean类型,所以报错

3. b=-a++;    单目运算的优先级较高  所以这句等同于  b= (-a)++    由于赋值运算的优先级低于 ++      a++运算的说明是先把a拿去运算,然后在给a加1,

   所以  这里这个运算的结果是 b= (-a) ,而a= a+1

   假定a= 4

    那么经过b=-a++ 的运算后,b=(-4),  a=5

   通常不建议这么写表达式,很容易把自己搞昏了,特别是a++   与 ++a  ,
作者: 乔培培    时间: 2013-1-18 15:04
这是一个三元运算符 ,也是唯一的一个
? 左边是一个逻辑判断,如果为true整个表达式就为:左边的值,也就是a
如果为false整个表达式就为:右边的值,也就是b
max=a/b?a:b;     ?号左边的是a/b,这并不是一个逻辑判断,而这点必须是一个逻辑判断,或者直接写true或false

b=-a++;     你就这么记,那个离b近,就先算哪一个




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