黑马程序员技术交流社区

标题: y=(x++)*((++x)+(x*10))运算为什么不先算括号里面的? [打印本页]

作者: nastasya    时间: 2016-4-16 11:46
标题: y=(x++)*((++x)+(x*10))运算为什么不先算括号里面的?
基础课讲的是 int x=4; int y=(x++)+(++x)+(x*10);然后 结果是x=6 y=70 明白了

可是  自己又试了一下 int x=4;  int y=(x++)+((++x)+(x*10));运行结果依旧是x=6 y=70
如果括号里面优先级高,先算括号里面的话  算到x*10的时候不应该是5*10吗?

为了突出括号效果  改一下算式
int x=4;  int y=(x++)*((++x)+(x*10));  结果是x=6 y=264   JAVA先算的第一个x++,之后才算括号里面的,按照4*(6+60)算的
可是 按照运算符的优先级 ()的优先级是高于++的,为什么不先算括号里的?

int x=4;  int y=(x++)*(++x)+(x*10);    结果是x=6 y=84  JAVA按4*6+60算的 谁都能理解

感觉++ 这个运算设计出来就是为了循环那里计数用的,其他地方就像一个BUG 一样,就不应该参与到其他运算中去,弄得人头昏脑涨,根本就应该规范杜绝乱使用,而不是当做什么考点......好像就中国才这么干,外国编程学习注重功能性程序段的标准化,学的是一段一段的标准程序,然后互相拼接组成整体

难道把++运算弄得多熟悉 会对JAVA整体编程有多大帮助吗?
作者: 张宪达    时间: 2016-4-16 13:03
只要懂了运算符的作用,后面的知识不会用到太复杂的东西,没有实际应用
作者: 赵钱孙李王杨    时间: 2016-4-16 13:50
按照我的理解:
int x=4;  int y=(x++)+(++x)+(x*10);运行结果是x=6 y=70  
int x=4;  int y=(x++)+((++x)+(x*10));运行结果是x=6 y=70
(x++) 的 (   ) 跟 ((++x)+(x*10)) 中的 (         ) 的优先级是一样的,你能理解int y=(x++)+(++x)=4+6,那你把第二项(++x)中的 ++x 替换成 (++x)+(x*10),然后再理解一下。
个人见解。


作者: hydl250    时间: 2016-4-16 14:22
楼上说的对,()的优先级是一样的, int y=(x++)+((++x)+(x*10))这个表达式里先算(x++),再算((++x)+(x*10));
二((++x)+(x*10))里面呢,是先算(x++),再算(x*10),再算两个之和。
作者: nastasya    时间: 2016-4-16 14:40
本帖最后由 nastasya 于 2016-4-16 15:02 编辑

感谢上面朋友的 解答,既然说到括号了
那 下面这个 式子
int x=5;  int y=x+++2*(++x);   JAVA计算结果是x=7  y=19  貌似按照5+2*7算出来的
可是如果按照先算括号的话  不是应该按照 6+2*6=18算吗?  
还是只要是x++,JAVA都是给先弄成(x++)然后计算??
按理说  自加自减 出到y=x+++2*(++x);这种变态式子 应该就算到头了吧
所以说 程序特别是计算表达式 写的不规范  是应该极力避免的  而不应该把这些书写很不规范的表达式作为考点来炫耀,还有比y=x+++2这样变态的式子吗????y=x+++x+++2





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