小白求教,为什么分开和合起来结果算出来的不一样
两个q算出来的不一样,差了1。。没搞明白,请高人指点。vc6.0反汇编看看可能优化了。 废话。分开和合起来的当然不一样!!
如:
int a=0;
int c=1+a++;
结果c的值为1,这么想吧,在同一个语句中,a++是a先参与运算,再进行a++;
上面相当于
int c=1+a;
a++;
这时a++好像实际没作用。
而++a中,不管如何,你先把a先加一再说。
比如:
int a=0,b=0;
if(a++ ==b++ )
{...............};
和这个一样效果
int a=b=0;
if(a++==b)
{b++;..........}; 解释一下合在一起的吧
刚开始 j=5
q=(++j)+(++j)+(++j)
编译器在运行的时候,首先是将前两个(++j)运算完之后,才进行这两个之间的相加
此时j=7,(++j)+(++j)=14,此时再进行第三次自加,j=8,q=14+8=22了 #4楼已经解释清楚了
这是VC6.0的汇编代码,楼主有兴趣可以自己看看:
18: q = (++j)+(++j)+(++j);
0040D7CB mov eax,dword ptr
0040D7CE add eax,1
0040D7D1 mov dword ptr ,eax
0040D7D4 mov ecx,dword ptr
0040D7D7 add ecx,1
0040D7DA mov dword ptr ,ecx
0040D7DD mov edx,dword ptr
0040D7E0 add edx,dword ptr
0040D7E3 mov eax,dword ptr
这个是编译器优化后的结果,++ --的问题不同的编译器可能有不同的优化,这个,如果懂汇编语言的话,建议看一下反汇编,了解一下,是如何优化的,这个是初学者容易搞混的,努力吧!!!:lol::lol::lol: 佩服啊,还以为自己水平不错了呢,原来还有这么多东西不懂,向大家学习了啊!{:1_1:}
页:
[1]