[求助]求助 b=++a + ++a + ++a 得算法过程
求助 b=++a + ++a + ++a 得算法过程 a=3那位高手教教我 我用的是Vc6.0
搜索更多相关的解决方案:
算法
----------------解决方案--------------------------------------------------------
a=6我明白 为什么b=16?不明白
----------------解决方案--------------------------------------------------------
怎么有编译错误
#include <iostream.h>
int main(void){
int a=3,b;
b=++a+++a+++a;
cout<<a<<endl<<b<<endl;
return 0;
}
--------------------Configuration: Institution - Win32 Debug--------------------
Compiling...
R&D.CPP
D:\创世纪\MICHEAL\MyProjects\AAA Institution\R&D.CPP(4) : error C2105: '++' needs l-value
执行 cl.exe 时出错.
R&D.OBJ - 1 error(s), 0 warning(s)
----------------解决方案--------------------------------------------------------
在我来看如果A=3 那么B=15
可是我的编译器不这么认为 编译结果18
----------------解决方案--------------------------------------------------------
#include "stdio.h"
main()
{int a=3,b;
b=++a + ++a + ++a;
printf("%d",b);
getch();
}
----------------解决方案--------------------------------------------------------
不同的编译器规定的结合性不一样。三楼的可以加上空格或者括号试一下。
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
加括号和加空格之后都可以编译通过
#include <iostream.h>
int main(void){
int a=3,b;
b=(++a)+(++a)+(++a);
cout<<a<<endl<<b<<endl;
return 0;
}
输出
6
16
----------------解决方案--------------------------------------------------------
程序代码:
#include <stdio.h>
int main()
{
int a=3,b;
b=++a + ++a + ++a;
printf(\"%d\n\",b);
}
程序代码:
.file \"temp.c\"
.def ___main; .scl 2; .type 32; .endef
.text
LC0:
.ascii \"%d\12\0\"
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
movl %eax, -12(%ebp)
movl -12(%ebp), %eax
call __alloca
call ___main
movl $3, -4(%ebp)
leal -4(%ebp), %eax
incl (%eax)
leal -4(%ebp), %eax
incl (%eax)
movl -4(%ebp), %eax
movl -4(%ebp), %edx
addl %eax, %edx
leal -4(%ebp), %eax
incl (%eax)
movl %edx, %eax
addl -4(%ebp), %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
movl %eax, 4(%esp)
movl $LC0, (%esp)
call _printf
leave
ret
.def _printf; .scl 2; .type 32; .endef
我们可以看到它先做了两次自增运算,这时a=5了,然后做了一次加法运算,再做一次自增运算,最后做一次加法运算。5+5+6等于16
至于为什么这样处理,我也不知道,我认为这种题目没有意义,我记得这种在一个语句中使用多次对同一变量带有副作用的表达式,有时候会造成编译器依赖,不同的编译器会得到不同的答案,而且这种写法在实际编程中不会被使用,正因为有编译器依赖就更应该避免使用。
注意我没有说避免使用带有副作用的表达式,而是说避免在一个语句中多次使用对同一变量带有副作用的表达式。
----------------解决方案--------------------------------------------------------
同意楼上看法,除非你以"破解"某编译器的编译原理为乐,否则这种题只对应试教育的命题人有意义!
另想请教LS是怎么得到它的汇编程序的
----------------解决方案--------------------------------------------------------