| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 615 人关注过本帖
标题:运算符输出结果与自己想的不一样
只看楼主 加入收藏
zlp52616
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-10-26
结帖率:100%
收藏
已结贴  问题点数:6 回复次数:9 
运算符输出结果与自己想的不一样
程序代码:
#include"stdio.h"
void main()
{
    int i=3,j=5;
    printf("%d,%d\n",(i++)-(--j),j=(i+=2));

}
输出结果为1,5。
如果将程序改为
程序代码:
#include"stdio.h"
void main()
{
    int i=3,j=5;
    printf("%d\n",(i++)-(--j));

}
输出结果为-1.

而我算出来的是:(i++)-(--j)的结果为-1;j=(i+=2)的结果为6.
请帮我讲解下我算的为什么不对,谢谢!
2011-11-08 10:57
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:0 
唉,又见到这种问题了,这是编译器的处理方式不同导致的。
最好不要这样写程序。
把printf("%d,%d\n",(i++)-(--j),j=(i+=2));
改成i++;    printf("%d,%d\n",i-(--j),j=(i+=2));
就能得到你要的结果了。
2011-11-08 11:36
wuyijiang07
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:74
专家分:177
注 册:2011-10-21
收藏
得分:0 
2楼正解,不想多说了,以后不要写这样的程序
2011-11-08 13:41
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 楼主 zlp52616
总是把做对事情的可能性交到编译器手里

总有那身价贱的人给作业贴回复完整的代码
2011-11-08 14:02
一只失语的猫
Rank: 2
等 级:论坛游民
帖 子:35
专家分:14
注 册:2011-10-26
收藏
得分:2 
#include<stdio.h>
void main ()
{
    int i = 3, j = 5;
    int x, y;
    x = (i++)-(--j);
    y = (i+=2);
    printf ("%d,%d\n",x,y);
}
你那样写比较会出错误吧,我还是建议这样写。
你那个写法会应为编译器的算法的方向是自左到右,还是从右到左的关系  出问题。
2011-11-08 17:10
zlp52616
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-10-26
收藏
得分:0 
回复 2楼 luchar
这样改后得到的结果是1,6。这个结果还是无法理解。这程序不是我编的啦,是书上讲运算符那章的程序,只是我没弄懂结果问下而已。可能是编译器处理的问题吧!
2011-11-08 17:11
zlp52616
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-10-26
收藏
得分:0 
回复 4楼 embed_xuel
什么意思? 呵呵,没太懂。
2011-11-08 17:12
心灵百合
Rank: 5Rank: 5
等 级:职业侠客
帖 子:215
专家分:367
注 册:2011-3-30
收藏
得分:1 
按道理没错,可能编译器处理顺序有问题吧
2011-11-08 19:33
huanega
Rank: 3Rank: 3
来 自:内蒙古
等 级:论坛游侠
帖 子:117
专家分:192
注 册:2011-11-4
收藏
得分:1 
从右运行了吧,或者当成 逗号表达式了

兴趣是编程最好的老师
2011-11-08 19:39
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:2 
就是有些编译器把 printf("%d,%d\n",(i++)-(--j),j=(i+=2));从左边计算,就是i先自增1,然后计算j=(i+=2)。
而有的编译器是从右往左计算,先计算j=(i+=2),然后算(i++)-(--j),这样就得到了5。
因为(i++)-(--j),j=(i+=2)这两个连在一起不是逗号表达式
2011-11-08 20:09
快速回复:运算符输出结果与自己想的不一样
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028654 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved