黑马程序员技术交流社区
标题:
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