鱼C论坛

 找回密码
 立即注册
查看: 2269|回复: 16

c语言

[复制链接]
发表于 2015-1-13 23:37:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教下列代码运算为什么会等于27,而不是24.:sweat:
#include<stdio.h>
#include<stdlib.h>
void main()
{
        int i =8;
        int y =(i--) + (++i) + (i++);
        printf("%d,%d,%d,%d\n", y, i++, i--, ++i);
        system("pause");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-19 19:47:09 | 显示全部楼层
:shock:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-19 20:53:06 | 显示全部楼层
y=9+9+9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-19 20:54:26 | 显示全部楼层
y=(++i)+(++i)=20
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 13:38:30 | 显示全部楼层
编译器问题 ...  看看反汇编代码...        能知道编译器到底是怎么读取的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 15:30:30 | 显示全部楼层
:mad:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-21 17:09:33 | 显示全部楼层
先弄懂i++ 跟++i 的区别八   i++ 是先使用i的值  然后在加一   ++i是先加1再使用i的值  自减跟自加是一个道理的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-21 20:41:50 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
void main()
{
        int i = 8;
//        int y = (i--) + (++i) + (i++);
        printf("%d,%d,%d,%d\n", (i--) + (++i) + (i++), i++, i--, ++i);
}
这样输出的结果是30,8,9,10
纠结吗?
跳过吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-1-21 21:52:21 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
void main()
{
        int i =8;
        int y =(i--) + (++i) + (i++);
        printf("%d,%d,%d,%d\n", y, i++, i--, i);//这回在测试得 27 9 9 9 理解了吗
        system("pause");
}
先用++i的值进行运算 上边就是(9--)+ 9 +( 9++) 之后8+9+10=27
输出的y=27 i++,i--,++i
因为上边的i还是9 在先用++i的缘故 ++i=10 这部输出没有后续运算i++,i--不运算
上边三个都为 10,10,10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-21 21:56:27 | 显示全部楼层
shaoguanfa 发表于 2015-1-21 20:41
这样输出的结果是30,8,9,10
纠结吗?
跳过吧

    #include<stdio.h>
    #include<stdlib.h>
    void main()
    {
            int i = 8;
    //        int y = (i--) + (++i) + (i++);
            printf("%d,%d,%d,%d\n", (i--) + (++i) + (i++), i++, i--, ++i);
    }
这一步 出的结果为30 9 9 9 你编译器有问题吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-21 22:26:51 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
void main()
{
        int i =8;
        int y =(i--) + (++i) + (i++);
        printf("%d,%d,%d,%d\n", y, i++, i--, i);//这回在测试得 27 9 9 9 理解了吗
        system("pause");
}
先用++i的值进行运算 上边就是(9--)+ 9 +( 9++) 之后8+9+10=27//不好意思这里错了 是9+9+9
输出的y=27 i++,i--,++i
因为上边的i还是9 在先用++i的缘故 ++i=10 这部输出没有后续运算i++,i--不运算
上边三个都为 10,10,10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-22 00:27:02 | 显示全部楼层
kklloo 发表于 2015-1-21 17:09
先弄懂i++ 跟++i 的区别八   i++ 是先使用i的值  然后在加一   ++i是先加1再使用i的值  自减跟自加是一个道 ...

y=(i--)+(++i)+(i++);

其中,(i--)=8 ; 之后,i值为7
        ,(++i)=8;之后,i值为8
         ,(i++)=8;
上面y 应该等于 24呀!???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-22 09:18:47 | 显示全部楼层
love105827 发表于 2015-1-21 21:56
#include
    #include
    void main()

小甲鱼说的很清楚了啊,编译器的问题,我们在实际使用的时候一般只会使用一个i++或者++i   所以不必纠结与这个问题了   上面的输出结果是我的编译器的问题  到了你那不一样了很正常的啊  编译器不同的原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-22 12:52:07 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
void main()
{
    int i = 8;
//   int y = (i--) + (++i) + (i++);
    printf("%d,%d,%d,%d\n", (i--) + (++i) + (i++), i++, i--, ++i);
}
同样的代码经测试
vc编译器输出是  30,9,9,9
Qt下用gcc编译器 输出是27,8,9,10
关于前置++ 和后置++ 不用的编译器的实现是不一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-22 21:31:10 | 显示全部楼层
谢谢,大家的帮助。{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-24 16:18:16 | 显示全部楼层
我也学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-27 20:11:15 | 显示全部楼层
y=(i--)+(++i)+(i++)  首先要明白,运算是自右向左运算的,即先(i++)+(++i)最后在加(i--);所以y=9+9+9。
还是不懂就看下面:
i=i++;// i=8;
i=++i;// i=9;
sum=i+i;  //所以最后会等于9+9
最后再
i=i--; //i=9
sum=sum+i;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 15:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表