int a=6; a+=a-=a*a++;

weixin_45827460 2019-12-28 11:47:58
int a=6; a+=a-=a*a++;如题,我算出来是-70,但是用eclipse算出来是-24???有没有大佬解释下?
...全文
346 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
敲出亿行bug 2020-01-06
  • 打赏
  • 举报
回复
因为++ 的优先级低所有先运++左边的 根据代码规律从左到右 先是6*6 --》 6-36 --》6+(-24)
卿文天 2020-01-06
  • 打赏
  • 举报
回复
a++或者++a的运算应该是取值的时候进行的一个不可分割的操作,即a++ 是先取了a的值立即运算了一次a=a+1;而++a是在取值时立即进行了a=a+1再返回取值。
天行归来 2019-12-30
  • 打赏
  • 举报
回复
参考一篇运算符总结文章 https://www.cnblogs.com/gw811/archive/2012/10/13/2722752.html 另外,实际测试: a+=a++ => a = a+a , ++其实没有影响运算 a+=a-=a*a++ 运算过程: 1、a*a++ => a*a = 36; 2、a-=a*a => a = a-a*a = 6-36 = -30; 3、a+=-30 => a = a-30 = 6-30 =-24;
dkwuxiang 2019-12-30
  • 打赏
  • 举报
回复
引用 3 楼 庸俗的情怀 的回复:
因此他的输出是-24而执行后他实际值是-23
怎么也得自己运行下,再发表评论吧,再不行,发布评论后,自己也得运行一下吧,解释的什么
weixin_45827460 2019-12-29
  • 打赏
  • 举报
回复
还是说java运算跟c语言运算不一样?
IT_熊 2019-12-29
  • 打赏
  • 举报
回复
考试笔试最喜欢考这个
qybao 2019-12-29
  • 打赏
  • 举报
回复
先求表达式6+=6-=36的值,最后执行a++,即a变为7 而表达式的值不管从左算还是从右算都是-24(至于是从左算还是从右算,可以用javap反编译看看伪代码就知道了)。
三仙半 2019-12-29
  • 打赏
  • 举报
回复
这个题目我是真不知道结果,因为,我不愿意研究这样的题目,我总觉得如果是我自己写代码,我不会写这样的代码,这样的代码可读性太差了,如果是别人写的代码,我输出一下,知道结果就行了。运算符的优先级确实需要了解一些,自己写代码的话,还是用括号把运算顺序显式的标志出来,或者分行书写,更合理一些。
个人观点,勿喷,嘿嘿。。。。。
Modify_QmQ 2019-12-29
  • 打赏
  • 举报
回复
因此他的输出是-24而执行后他实际值是-23
Modify_QmQ 2019-12-29
  • 打赏
  • 举报
回复
首先将a带入进去, a+=a-=a*a++ 就变成了6+=6-=6*6++ 先乘除后加减, 6+=6-=36++ 从左至右运算,6+=6等价于6+6 =12 再12-=36 等价于12-36 =-24 -24++结果应该是-23怎么又输出了-24 这个时候就要注意i++和i=i+1的区别了,i++是将i的值传给前者,也就是要输出的那个变量,最后在执行++操作(即+1)

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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