x = x + (x++) + (++x) 计算顺序

demondeviljet 2013-05-12 11:11:05
x = x + (x++) + (++x) 计算顺序,运算符+号前后的算式得到的x的值会相互影响么
...全文
595 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yqj2065 2013-05-14
  • 打赏
  • 举报
回复
x = x + (x++) + (++x) 在C中语义是未定义的,随着编译器的不同可以有不同的结果; 在Java中有明确的定义。 这是介绍语义与语法区别和计算顺序的一个好例子,实践中避免使用。
ObertShen 2013-05-13
  • 打赏
  • 举报
回复
五楼正解,i++就是语句执行完毕以后补做一个i=i+1的赋值,++i就是在语句执行之前执行一个i=i+1语句。 可参考链接http://zhidao.baidu.com/question/35522236.html
失落夏天 2013-05-13
  • 打赏
  • 举报
回复
引用 5 楼 AA5279AA 的回复:
x = x + (x++) + (++x) 结果过应该是 3x+1吧。 其实你不用管内部怎么计算的,只要知道 x++是返回x ++x是返回x+1就可以了。
错了 应该是 x+ x + (x+1)+1=3x+2
失落夏天 2013-05-13
  • 打赏
  • 举报
回复
x = x + (x++) + (++x) 结果过应该是 3x+1吧。 其实你不用管内部怎么计算的,只要知道 x++是返回x ++x是返回x+1就可以了。
qq10086q 2013-05-13
  • 打赏
  • 举报
回复
i++ 是执行运算后 i的值加1 ;++i是先执行加1在做运算
yangjinjvs 2013-05-13
  • 打赏
  • 举报
回复
千斤顶。。。
GS2012 2013-05-13
  • 打赏
  • 举报
回复
6楼正解,结果3x+2. x++和++x参与运算时分别为x和x+1,参与运算后x值都变为x+1
你好不开心 2013-05-13
  • 打赏
  • 举报
回复
感觉上和编译器以及优化方式有关,以前试过i=i++; visual studio 2010和eclipse结果就不一样
nypdmax 2013-05-13
  • 打赏
  • 举报
回复
这种运算从来都是看编译器怎么处理的,不同编译器在语法处理上的不同会导致结果不一样
linhu007 2013-05-13
  • 打赏
  • 举报
回复
X++是执行后在内存中再加上1的,而++X是先加1后在去执行
小灰狼 2013-05-13
  • 打赏
  • 举报
回复
在类C语言的程序语言中,C/C++, java, javascript, C# 得到的结果都可能不同。楼主的这种写法增加了程序出现错误的风险,增加了维护成本和难度,有百害而无一利 可能大学里的老师喜欢在考试的时候出这种题,但是这种写法除了拿来show一下之外,没有什么实际意义。
shine333 2013-05-13
  • 打赏
  • 举报
回复
引用 4 楼 spiniper 的回复:
其实这取决编译器,真的,你在cl下编译的结果和gun gcc下的编译的结果是不一样的。 如果这是java,那我只能说 IBM的JDK与SUN的JDK可能也不一样。
不管哪家的JDK,也必须一样
demondeviljet 2013-05-13
  • 打赏
  • 举报
回复
错了 是3x+2
demondeviljet 2013-05-13
  • 打赏
  • 举报
回复

结果 3x+1
树成 2013-05-12
  • 打赏
  • 举报
回复
其实这取决编译器,真的,你在cl下编译的结果和gun gcc下的编译的结果是不一样的。 如果这是java,那我只能说 IBM的JDK与SUN的JDK可能也不一样。
nmyangym 2013-05-12
  • 打赏
  • 举报
回复
引用 2 楼 u010541522 的回复:
它其实是这样的,例如 int x = 2 ; 那么 x = x + (x++) + (++x) 就等于 x = 2 + 2 + 4 ; 因为先运算左括号里的再运算右括号的,而左括号的(x++)会先把x = 2用于运算,再将x+1变为3来存储 x,此时x=3便参与右括号(++x)的计算,而这样是先++之后的到x=4再存储来运算。你要记得 x++是用x来计算或者做其他的输出之类的然后才会++再存储用以下面的,而++x就刚好相反,其 是先++给x加1之后存储再进行当前的计算,只要记得“后++用以后面,前++用以前面”就不会出错了
++
  • 打赏
  • 举报
回复
它其实是这样的,例如 int x = 2 ; 那么 x = x + (x++) + (++x) 就等于 x = 2 + 2 + 4 ; 因为先运算左括号里的再运算右括号的,而左括号的(x++)会先把x = 2用于运算,再将x+1变为3来存储 x,此时x=3便参与右括号(++x)的计算,而这样是先++之后的到x=4再存储来运算。你要记得 x++是用x来计算或者做其他的输出之类的然后才会++再存储用以下面的,而++x就刚好相反,其 是先++给x加1之后存储再进行当前的计算,只要记得“后++用以后面,前++用以前面”就不会出错了
panda060802 2013-05-12
  • 打赏
  • 举报
回复
debug一下就可以看到了。 把代码写成这样,然后打个断点,运行一行看一下X的值就可以看到了。 x = x + (x++) + (++x);

62,614

社区成员

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

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