| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1960 人关注过本帖
标题:谁能告诉我这是为什么
只看楼主 加入收藏
freish
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1223
专家分:437
注 册:2007-6-1
结帖率:100%
收藏
 问题点数:0 回复次数:22 
谁能告诉我这是为什么
程序代码:
#include <iostream>
using namespace std;
int main()
{
    int a=1;
    //int d = a++ + a-- + a++;
    int s = (a++) + (--a) + (a--) + (++a);

    //int p =++a;
    //p += a--;
    //p += ++a;
    printf("s=%d\na=%d",s,a);
    return 0;
}


谁能告诉我这个程序是怎么执行的

[[it] 本帖最后由 freish 于 2008-11-4 10:04 编辑 [/it]]

cpp.jpg (30.62 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


java.jpg (22.45 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 语句 
2008-11-03 23:19
freish
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1223
专家分:437
注 册:2007-6-1
收藏
得分:0 
结果与想象的完全不一样
2008-11-03 23:30
lockhawk
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2008-9-17
收藏
得分:0 
试验结果是
a=2
d=3
s=5
但不明白??要是我手算应该是:2,4,8。。。。
谁来说一下啊

人生最大痛苦:虽然不明白你们说什么,但还是要听!
2008-11-03 23:32
youhm
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2006-5-25
收藏
得分:0 
按从左到右的顺序计算

a = 2
s = a++ + --a + a-- + ++a
s = ((1   + 1)+ 1 ) +   2
2008-11-04 00:03
阿魔密火
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-11-3
收藏
得分:0 
#include <iostream>
using namespace std;
改成如下
int main()
{
    int a=1;
    int d = a++, e=a--, f=a++;
    int g=d+e+f;
    int s = a++ + --a + a-- + ++a;
    cout<<a<<","<<g<<","<<s;
    system("pause");
}
运行结果是 2,4,8

而楼主给的程序
#include <iostream>
using namespace std;
int main()
{
    int a=1;
    int d = a++ + a-- +a++;
    int s = a++ + --a + a-- + ++a;
    cout<<a<<","<<d<<","<<s;
    system("pause");
}

运行结果2,3,8
(我的运行平台是vc2005)我也感到奇怪
2008-11-04 00:43
夜罗刹
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-10-30
收藏
得分:0 
优先级自增自减运算符较高
int d = a++ + a-- + a++ 写成int d = (a++) + (a--) + (a++)
  运算时取a的值1相加三次后得到d=3 而后进行自增自减运算得到a=2
  进入
 int s = a++ + --a + a-- + ++a
  这个我算的是
  2+1+1+2=6
 不知道谁能来回答一下
2008-11-04 00:46
阿魔密火
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-11-3
收藏
得分:0 
六楼
int s=a++ + --a +a-- + ++a
++a先自增在用,a++先用在自增。
应该是2+2+2+2=8
a++ 表达式变为2 a值变为3
--a 表达式变为2 a值变为2
a-- 表达式变为2 a值变为1
++a 表达式变为2 a值变为2
最后四个表达式相加即为2+2+2+2=8
2008-11-04 00:55
freish
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1223
专家分:437
注 册:2007-6-1
收藏
得分:0 
大家试验后在说话,不要空想,结果是与想象不一样的

但在java中就与想象中的一样了
2008-11-04 07:57
youhm
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2006-5-25
收藏
得分:0 
各种编程环境编译可能会有差异

在VC6.0里我认为是这样的

后置的自增自减运算符在语句结束后在考虑,也即对本条语句结果不产生影响

int a=1;
int d=a++ + a-- + a++;
int s=a++ + --a + a-- + ++a;

可以写成下面这样

int a=1;
int d=a + a + a
a++;
a--;
a++;

--a;
int s=a + a;
s=s + a;
++a;
s=s+a;
a++;
a--;
2008-11-04 08:51
冰烨
Rank: 1
来 自:不咔界
等 级:新手上路
威 望:1
帖 子:135
专家分:0
注 册:2007-10-30
收藏
得分:0 
右结合应该是248,vc2005是左结合,左结合应该是238

要么死去,要么奋斗!
2008-11-04 09:29
快速回复:谁能告诉我这是为什么
数据加载中...
 
   



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

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