搜索
查看: 735|回复: 2
打印 上一主题 下一主题

关于自增的运算一直不明白的地方

[复制链接]
跳转到指定楼层
楼主
发表于 2014-1-29 11:02:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
我刚学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的值和书上理论算出来的不一样呢?

最佳答案

查看完整内容

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

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

谢谢您,原来C里面还有这么一说。刚起走,看来以后还要有很长的路要走。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表