社区
C语言
帖子详情
(++x)+(++x)+(++x)
qixiawoshishui
2009-10-29 10:34:11
x初值为5然而(++x)+(++x)+(++x)值为22为什么???
...全文
217
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
打赏
举报
回复
++++++++
libstdc
++
.so.6.0.13 (x64)
切换到根用户下 mv libstdc
++
.so.6.0.13 /usr/lib64/ ln -s libstdc
++
.so.6.0.13 libstdc
++
.so.6
最简单的基于FFMPEG+SDL的视频播放器(2014.5.6)
FFMPEG工程浩大,可以参考的书籍又不是很多,因此很多刚学习FFMPEG的人常常感觉到无从下手。 该播放器代码十分简单,只有约100行左右。但是几乎包含了使用FFMPEG播放一个视频所有必备的API,并且使用SDL显示解码出来...
64位Win7环境中PHP安装文件【Apache+PHP+MySQL】
安装文件: httpd-2.2.19-win64.rar mysql-5.5.33-winx64.msi php-5.3.6-Win32-VC9-x64.zip 详细安装步骤请参阅本人博客: http://blog.csdn.net/yousuosi/article/details/9859507
x=x
++
问题
首先我们需要明确x
++
和
++
x的区别 x
++
:将先使用变量x当前的值,然后+1
++
x:先讲变量x的值+1然后使用 如下: 所以当x=x
++
时,x先用后加,先执行x=x把CPU中的计算结果刷新到内存,此时内存中x的值等于之前的...
++
x和x
++
的执行方式
y=(
++
x)+(x
++
)+(
++
x);有的同学运算出的结果是30 ,而我的运算结果是28. 这个执行的结果,原因是不同的编译器有不同的结果。当编译器执行printf是从右往左执行的结果为30,当编译器的执行的顺序是从左往右则计算...
C语言
70,034
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章