A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 深情眸 中级黑马   /  2015-4-10 21:12  /  1063 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a=1,b=2,c;
c=-a+++b++;
a=多少?
-a++到底是怎么运行的?

14 个回复

倒序浏览
a++表达式的值是1,运行后a的值是2,-a++,先算a++后加一个负号
回复 使用道具 举报
37°天黑 发表于 2015-4-10 21:14
a++表达式的值是1,运行后a的值是2,-a++,先算a++后加一个负号

为什么不先-a呢
回复 使用道具 举报

你想想如果先给a一个负号的话,就是一个常量,常量是不可以自加运算的。所以我理解是先a++后给他负号!
回复 使用道具 举报
我感觉,确实难以理解,同求解
回复 使用道具 举报
37°天黑 发表于 2015-4-10 21:39
你想想如果先给a一个负号的话,就是一个常量,常量是不可以自加运算的。所以我理解是先a++后给他负号! ...

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

我今天查了一下,-号运算符是单目运算符,运算顺序是自右向左的!这下就可以解释通了!!
回复 使用道具 举报
学习了,谢谢楼主
回复 使用道具 举报
对的,两个运算符都是右结合的,从右向左计算
回复 使用道具 举报
先算++  后算-,即为-(a++)
回复 使用道具 举报
-和++是同优先级  结合性都是从右到左,所以先算a++然后再加负号
回复 使用道具 举报
-a++可以看作-(a++)
回复 使用道具 举报
先算a++然后   算出来后,符号给a,但是a的值还是整数,你把那个-理解为负数就行,不影响a,只是运算使用
回复 使用道具 举报
37°天黑 发表于 2015-4-11 21:19
我今天查了一下,-号运算符是单目运算符,运算顺序是自右向左的!这下就可以解释通了!! ...

正解!哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马