社区
C语言
帖子详情
(++x)+(++x)+(++x)
qixiawoshishui
2009-10-29 10:34:11
x初值为5然而(++x)+(++x)+(++x)值为22为什么???
...全文
242
8
打赏
收藏
(++x)+(++x)+(++x)
x初值为5然而(++x)+(++x)+(++x)值为22为什么???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
asimay
2009-10-30
打赏
举报
回复
这种题编译应该是不确定行为的warning。
qixiawoshishui
2009-10-30
打赏
举报
回复
一位高手提供给的
各个编译器下自加运算的不同结果
题目:X=5 (++X)+(++X)+(++X)的结果
TC2.0以及VS C# .net2.0
运算结果为 21
这个和我们很容易想到 运算过程是 6+7+8
第一步X先自加 为6
第二步X自加为7 与前一个6相加得 13
第三步X自加为8 与13相加为21
VS2005 C++
运算结果是 24
运算过程是:
第一步 X自加一次 为6
第二步 X再自加一次为7
第三步 X再自己为8
最后三个8相加为24
这里括号中的自加运算符优先级更高 先运算 随后再参加相加运算
VC6下
运算结果为22
运算过程看以下反汇编代码: x用[x]表示]
00401036 mov eax,[x]
00401039 add eax,1
0040103C mov [a],eax;完成第一个++x,此时x=6
0040103F mov ecx,[x]
00401042 add ecx,1
00401045 mov [x],ecx;完成第二个++x,此时x=7
00401048 mov edx,[x]
0040104B add edx,[x];完成(++x)+(++x),此时结果是7+7=14
0040104E mov eax,[x]
00401051 add eax,1
00401054 mov [x],eax;完成第三个++x,此时x=4
00401057 add edx,[x];完成[(++x)+(++x)]+(++x),此时结果是14+8=22
0040105A mov [result],edx
所以你其实可以这样理解:
第一步 (++x)+(++x)这一步要完成2次++a后a=3,然后将结果相加7+7=14,第一步的结果是14
第二步 14+(++x)这一步先完成一次++x后a=8,然后预算14+8,得到最后结果22
所以总结得到++前置的运算优先级…局部…大于+,请注意那个局部
wightmight
2009-10-30
打赏
举报
回复
楼上说的似乎有点道理
booksoon
2009-10-30
打赏
举报
回复
别再折腾这样的问题啦~
特烦中国式的考试,一大串的+++++++,有意义吗?
真在程序中出现这样的写法,说明你的编程习惯差的很~~~
OneBleach
2009-10-30
打赏
举报
回复
依赖编译器实现
苍蝇①号
2009-10-30
打赏
举报
回复
这样的情况只有在中国式的考试中会出现,现实中要是你写出这样的代码的话老板会炒你鱿鱼
mstlq
2009-10-29
打赏
举报
回复
请自行查看反汇编代码……
另外,此问题结果依赖编译器实现,深究无益……
slowgrace
2009-10-29
打赏
举报
回复
++++++++
「杂谈」由C/C
++
中(
++
i)+(
++
i)+(
++
i)+(
++
i)表达式的计算结果引申出的疑问
博客讨论了C/C
++
中表达式(
++
i)+(
++
i)+(
++
i)+(
++
i)导致的不同计算结果,解释了这是由于编译器对未定义行为的处理差异造成的。顺序点、副作用和未定义行为的概念被引入,提醒程序员避免写出可能导致不确定性的代码。
也谈(
++
i)+(
++
i)+(
++
i)
本文探讨了一个看似简单的C语言代码片段,该片段涉及变量i的连续递增操作,并对其结果进行了详细解析。通过分析,我们了解到这种行为与编译器处理方式及运算符优先级有关。
int y=0,x=3; y=(
++
x)+(
++
x)+(
++
x);,为什么y的值为16?
本文介绍了一个强大的Markdown编辑器,该编辑器具备丰富的功能,如代码高亮、图片拖拽、KaTeX数学公式支持等,旨在提升用户的写作体验。此外,还提供了快捷键和其他实用功能的详细介绍。
(x
++
)+(
++
x)的运算理解
本文深入探讨Java中自增自减运算符的使用与优先级问题,通过具体实例解释了(x
++
)与(
++
x)的区别,帮助读者理解在不同情境下变量的变化过程。
x
++
与
++
x
博客介绍了变量递增运算符的使用规则。当运算符位于变量前面(
++
x)时,会先进行递增操作;当运算符位于变量后面(x
++
)时,则会后进行递增操作。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章