黑马程序员技术交流社区

标题: 小白问题,大牛来看 [打印本页]

作者: 深情眸    时间: 2015-4-10 21:12
标题: 小白问题,大牛来看
int a=1,b=2,c;
c=-a+++b++;
a=多少?
-a++到底是怎么运行的?

作者: 37°天黑    时间: 2015-4-10 21:14
a++表达式的值是1,运行后a的值是2,-a++,先算a++后加一个负号
作者: 深情眸    时间: 2015-4-10 21:26
37°天黑 发表于 2015-4-10 21:14
a++表达式的值是1,运行后a的值是2,-a++,先算a++后加一个负号

为什么不先-a呢
作者: 37°天黑    时间: 2015-4-10 21:39
深情眸 发表于 2015-4-10 21:26
为什么不先-a呢

你想想如果先给a一个负号的话,就是一个常量,常量是不可以自加运算的。所以我理解是先a++后给他负号!
作者: longer057    时间: 2015-4-10 21:53
我感觉,确实难以理解,同求解
作者: longer057    时间: 2015-4-10 21:55
37°天黑 发表于 2015-4-10 21:39
你想想如果先给a一个负号的话,就是一个常量,常量是不可以自加运算的。所以我理解是先a++后给他负号! ...

其实刚才我想这么回的,但是这样理解是错误的,平时也是先给变量值然后才++的啊!
作者: fantacyleo    时间: 2015-4-10 22:28
这问题就是看优先级和结合性,而优先级和结合性的本质就是加括号。a的左边是- 右边是++,二运算符优先级相同,看结合性是右结合,那么a就和++结合,变成c=-(a++)+b++;
接着看b,左边是+,右边是++,++的优先级高,于是b和++结合,变成c=-(a++)+(b++)
最后看a++,左边是-,右边是+,-作为负号时优先级高于+作为加法运算符,因此c=(-(a++))+(b++) 搞定~
作者: 37°天黑    时间: 2015-4-11 21:19
longer057 发表于 2015-4-10 21:55
其实刚才我想这么回的,但是这样理解是错误的,平时也是先给变量值然后才++的啊! ...

我今天查了一下,-号运算符是单目运算符,运算顺序是自右向左的!这下就可以解释通了!!
作者: luyakus    时间: 2015-4-11 21:26
学习了,谢谢楼主
作者: longer057    时间: 2015-4-11 21:37
对的,两个运算符都是右结合的,从右向左计算
作者: 距离    时间: 2015-4-11 21:54
先算++  后算-,即为-(a++)
作者: 举举手    时间: 2015-4-11 21:54
-和++是同优先级  结合性都是从右到左,所以先算a++然后再加负号
作者: 波阿波    时间: 2015-4-11 21:58
-a++可以看作-(a++)
作者: 流云踏风    时间: 2015-4-11 22:06
先算a++然后   算出来后,符号给a,但是a的值还是整数,你把那个-理解为负数就行,不影响a,只是运算使用
作者: 深情眸    时间: 2015-4-11 22:11
37°天黑 发表于 2015-4-11 21:19
我今天查了一下,-号运算符是单目运算符,运算顺序是自右向左的!这下就可以解释通了!! ...

正解!哈哈




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