社区
C语言
帖子详情
(++x)+(++x)+(++x)
qixiawoshishui
2009-10-29 10:34:11
x初值为5然而(++x)+(++x)+(++x)值为22为什么???
...全文
247
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=2时,(
++
i)+(
++
i)+(
++
i)+(
++
i)的计算结果的时候,给出的答案是19。我感到很困惑,按照正常的计算逻辑结果应该是18,于是我到菜鸟教程的在线编译器上面试了一下,得到的结果是18,后来又在Xcode上试了一次,得到的结果也是18,更换了ACM竞赛专用的codeblocks编译,结果是19。 贴出代码: #include "stdio.h" ...
也谈(
++
i)+(
++
i)+(
++
i)
今天有人在论坛中发了这样一个蛋疼的问题: int i =1,d; d=(
++
i)+(
++
i)+(
++
i); printf("%d\n",d); 上面的输出结果是多少? 如果你没见过。你可以先想想结果是多少?再去编程验证一遍。如果你想不通,再来看原因。
int y=0,x=3; y=(
++
x)+(
++
x)+(
++
x);,为什么y的值为16?
这里写自定义目录标题欢迎使用Markdown编辑器**加粗样式**新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导...
(x
++
)+(
++
x)的运算理解
第一次的分享,谈谈学习心得, (x
++
)+(
++
x)的运算理解 先提个小问题, int x = 4 ; int x = 4 ,y ; y = (x
++
) + (
++
x) ; 这里面,y的值等于多少? 运算中的 (x
++
) 和(
++
x)分别是数字几? 还有另一个问题 int a=2,b=3; a&b*2^4>>a
++
这两个问题就需要我们理解和记住 java语言运算符的优先级 真正的搞清楚
++
, --,单独使用和参与运算的使用. 情况1: 单独使用:无论
关于C语言中“x
++
”和“
++
x”的问题
关于一个变量在不同环境下自增自减的问题。 #include int main() { int x = 8; int y = 0; y = (
++
x) + (x
++
) + (
++
x); printf("%d\n",y); return 0; } 在Linux环境下,输出的结果是是28,但是在Windows环境下,输出的结果却是30,这就和“
++
x”和“x
++
”有关了。 首
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章