啊哈磊_编程从这里起步

标题: 关于自增的运算一直不明白的地方 [打印本页]

作者: 哎呀呀    时间: 2014-1-29 11:02
标题: 关于自增的运算一直不明白的地方
我刚学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的值和书上理论算出来的不一样呢?


作者: rosynirvana    时间: 2014-1-29 11:02
未定义
看一楼的回复
http://bbs.ahalei.com/forum.php?mod=viewthread&tid=4248

简而言之就是自增自检改变变量值的那个效果不是立刻结算的
作者: 哎呀呀    时间: 2014-1-29 11:33
rosynirvana 发表于 2014-1-29 11:02
未定义
看一楼的回复
http://bbs.ahalei.com/forum.php?mod=viewthread&tid=4248

谢谢您,原来C里面还有这么一说。刚起走,看来以后还要有很长的路要走。




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2