关于a=4,++a+=a++最后结果的研究
来源:互联网 发布:什么是淘宝最低价 编辑:程序博客网 时间:2024/05/16 17:03
a=4,b=0,编译环境vc++2008
++a+=a++
结果:a=11
汇编:
mov eax, DWORD PTR _a$[ebp]
add eax, 1
mov DWORD PTR _a$[ebp], eax
mov ecx, DWORD PTR _a$[ebp]
add ecx, DWORD PTR _a$[ebp]
mov DWORD PTR _a$[ebp], ecx
mov edx, DWORD PTR _a$[ebp]
add edx, 1 mov DWORD PTR _a$[ebp], edx
猜测:先++a +=a,最后a++ --> 先++a,再+= -->先++a再+=,最后a++
问题:i.++a和a++能否当左值? ii.++a和a++返回的结果是什么? iii.++a 、+=及a++优先级顺序? ix.整个程序执行顺序?
查msdn知:
i.a++(后置++)为一元运算符,先返回操作数,返回值为操作数的值,然后操作数的值加1,a++不能当左值。
ii.++a(前置++)为一元运算符,先在操作数的值上加1个单位,再返回操作数,++a返回值是左值,类型与操作数相同,操作数必须是非const的integral,floating,or pointer type的左值
iii.优先级a++ > ++a > +=
验证:
1.++b+=a
结果:b=5,a=4
汇编:
mov eax, DWORD PTR _b$[ebp]
add eax, 1
mov DWORD PTR _b$[ebp], eax
mov ecx, DWORD PTR _b$[ebp]
add ecx, DWORD PTR _a$[ebp]
mov DWORD PTR _b$[ebp], ecx
分析:先++b,再+=结论:++b比+=优先级高
2.b+=a++
结果:b=4 a=5
汇编:
mov eax, DWORD PTR _b$[ebp]
add eax, DWORD PTR _a$[ebp]
mov DWORD PTR _b$[ebp], eax
mov ecx, DWORD PTR _a$[ebp]
add ecx, 1
mov DWORD PTR _a$[ebp], ecx
分析:a++先返回a去先做b+=a,再a++
3.++b+=a++
结果: b=5 a=5
汇编:
mov eax, DWORD PTR _b$[ebp]
add eax, 1
mov DWORD PTR _b$[ebp], eax
mov ecx, DWORD PTR _b$[ebp]
add ecx, DWORD PTR _a$[ebp]
mov DWORD PTR _b$[ebp], ecx
mov edx, DWORD PTR _a$[ebp]
add edx, 1 mov DWORD PTR _a$[ebp], edx
分析:a++先返回a做 ++b+=a ,再++b,然后+=,最后a++
4.++a+=a
结果:a=10
汇编:
mov eax, DWORD PTR _a$[ebp]
add eax, 1
mov DWORD PTR _a$[ebp], eax
mov ecx, DWORD PTR _a$[ebp]
add ecx, DWORD PTR _a$[ebp]
mov DWORD PTR _a$[ebp], ecx
分析:先++a,再+=
5.a+=a++
结果:a=9
汇编:
mov eax, DWORD PTR _a$[ebp]
add eax, DWORD PTR _a$[ebp]
mov DWORD PTR _a$[ebp], eax
mov ecx, DWORD PTR _a$[ebp]
add ecx, 1
mov DWORD PTR _a$[ebp], ecx
分析:a++先返回a做a+=a,再a++
结论:++a+=a++
整个程序在vc++2008中的运行顺序是:a++先返回a做++a+=a再++a再+=最后a++最后a的值为11.
- 关于a=4,++a+=a++最后结果的研究
- 关于C语言中a=a++与a=++a的研究
- 关于A*算法的研究
- Java面试题之:关于Java中a=a++;的结果
- 求Sn=a+a*a+a*a*a+a*a*a*a的和,其中a是一个数字。
- cout<<a++<<++a<<a 的结果??
- (++a)+=(a++)和(++a)=(++a)+(a++)的区别
- (++a)+=(a++)和(++a)=(++a)+(a++)的区别
- 快速幂求a^b结果的最后一位
- 求Sn = a + aa + aaa +... + a.....a 的值,其中a为数字,n为最后一个数字中a的位数,a和n由键盘输入。
- 关于A*算法的一些研究
- java中 关于a = a++; 与 a = ++a; 的问题
- 由a+=a-=a*=a想到的
- 关于a=1++
- 关于null != a 与 a != null 的区别
- java中关于a!=a的例子~.~!
- 关于A a = new B()
- a += a -= a*a
- 【转】专家推荐 13个优秀的UML建模工具软件
- unlink 函数
- 随便一些
- JavaScript中的标识符(附:关键字表)
- bada开发——Web控件的使用及获取用户点击的链接地址
- 关于a=4,++a+=a++最后结果的研究
- 文件打开方式在windows和unix系统上的不同
- 2010-10-21 10:42:04
- How to Create an HTML Editor for ASP.NET AJAX
- 高兴啊
- Code Review与CheckStyle
- JPA ID生成策略
- extjs调试工具firebug的安装
- 初来乍到