我刚学C,里面关于自增的运算,一直不明白,下面是我我自己写的,为了跟进哪出错,所以写的比较繁琐,见谅:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=8,b=5,c=5,d=5,e=5,f=5,x,y,z,l,m,n;
printf("%d\n",++a); /*输出9*/
printf("%d\n",--a); /*输出8*/
printf("%d\n",a++); /*输出8后a值为9*/
printf("%d\n",a--); /*输出9后a值为8*/
printf("%d\n",-a++); /*输出-8后a值为9*/
printf("%d\n",-a--); /*输出-9后a值为8*/
printf("此时a值为%d\n",a); /*此时a值应为8*/
x=(b++)+(b++)+(b++); /*b值先相加,在自增三次*/
printf("x=%d\nb=%d\n",x,b); /*输出结果x=15,b=8*/
y=(++c);
printf("y=%d\nc=%d\n",y,c);
z=(++d)+(++d);
printf("z=%d\nd=%d\n",z,d); /*d先自增两次为7,在参与合运算为z=14*/
m=(++e)+(++e)+(++e);
printf("m=%d\ne=%d\n",m,e);
n=(++f)+(++f)+(++f)+(++f);
printf("n=%d\nf=%d\n",n,f);
system("pause");
return 0;
}
前面的都没有问题,有问题的就是红字的两行。e和f初值都为5,那m的运算应该是e自增三次后在参与和运算,故m=24才对,但实际上得到的m=22
但此时,e=8,可见己经自增了三次。同理,n=36才对,但实际上是n=31。f=9.
请问是哪出错了,为什么m和m的值和书上理论算出来的不一样呢?
|