问题描述:
int i=5;
j=(++i)+(++i);
j=(++ij+(++i)+(++i);
j=(++ij+(++i)+(++i)+(++i);
j,i各等于多少?是怎么个算来的呀 环境是Visual c++,
为什么我的结果是j=14,i=7
j=22,i=8
j=31,i=9
哪位高手讲讲这怎么会有那么多的差别,和书上说的不一样,和别人说的也不一样,到底是怎么得来的呀
问题解答:
算了,今天就多打点字了..
我只说一下vc++下的结果的原因啊,由于不同编译器,结合的方式不同,必然会有不同的结果了..
j=(++i)+(++i);
j=(++ij+(++i)+(++i);
j=(++ij+(++i)+(++i)+(++i);
先说第一个:计算的时候,有需要两个存放的空间,假如定义为寄存器a和寄存器b,把两个++i分别放在a和b中.
先执行++i,这个时候,i=6了,在执行一次++i,这个时候,i=7了.
由于寄存器a和b中存放的都是i,所以再执行一次(a)+(b)=14了(括弧表示其中的值)也就是7+7=14了.
第二个呢?
同理,先计算出第一个++i和第二个++i的和之后,结果为14了,再计算下一个++i,就是14+8=22了,同时i=8了
第三个呢:
就是22+9=31了,同时先执行了++i,所以i=9了..
不同的编译器,结合的方法不同,自然结果就不一样了......
main()
{
int i=0,j=0,k=0,l=0;
print("%d/n",i++);
print("%d/n",j--);
print("%d/n",++k);
print("%d/n",--l);
print("%d/n",i);
print("%d/n",j);
print("%d/n",k);
print("%d/n",l);
}
看看输出结果 你就明白了
i++ 与++i 都属于自增运算 表示让i加一
i-- 与--i 都属于自减运算 表示让i减一
符号在前面的表示先对i做自加或自减 再取出i的值进行其他操作
符号在后面的表示先取出i的值进行操作,然后再对i进行自加或自减
你所提出的表达式 是什么环境下的,因为不同的编译器对这个表达式有不同的处理方法
比如JAVA 下的答案是:
j=6+7=13 i=7
j=6+7+8=21 i=8
j=6+7+8+9=30 i=9
呵呵,小生也是刚弄清。自增、减分(加、减号)前和后置。前置是先加、减1再引用变量。后置则先引用再加、减。多关照。
比如10的自幸运是10+1+1