一个小xiao疑问...

passball 2009-03-12 09:35:02
a=5;b=(++a)+(++a)+(++a)那么b=? 22吗??为什么......请指教详细的计算过程,谢谢...



以前讨论过这个问题,有人说这东西和编译器有关系,不同的编译器结果不同,是这样吗??

......
但这个式子按照书上讲的,是应该运算出来的,不知道怎么出来的22??
...全文
62 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
八级程序员 2009-03-13
  • 打赏
  • 举报
回复
VC 8.0 使用乘法! (++a) + (++a) = 2*(++a)

其他的编译器 经推导是 (++a)+(++a)...= 值一 + 值二 ...+ 1 ; (Gcc/Dev)

所以 看楼主的问题就能很宽就知道了~

VC 下 = 24 其他编译器 =22

参考代码

#include <iostream>

using namespace std;

int main ()
{
int a = 5;
int b = 5;
int c = 5;
int d = 5;
int e = 5;


int x1 = (++a); // x = 6
int x2 = (++b)+(++b); // x2 = 14; ?guess: +=1 so,6+7+1=14;
int x3 = (++c)+(++c)+(++c); //x3 = 22/24 ?guess: + = 1 so, 6+7+8+1 =22;
int x4 = (++d)+(++d)+(++d)+(++d); //x4 = 31; ?guess + =1 so,6+7+8+9+1 = 31;
int x5 = (++e)+(++e)+(++e)+(++e)+(++e); //

cout << " x1 = "<< x1 <<" a: "<< a <<endl;
cout << " x2 = "<< x2 <<" b: "<< b <<endl;
cout << " x3 = "<< x3 <<" c: "<< c <<endl;
cout << " x4 = "<< x4 <<" d: "<< d <<endl;
cout << " x5 = "<< x5 <<" e: "<< e <<endl;

system("PAUSE");
return 0;
}




yh825118395 2009-03-13
  • 打赏
  • 举报
回复
不过这一题好像不是,应该是由于优先级的关系,它把++a都先算了,所以算得a 的值为8,然后是三个8相加得24的。
yh825118395 2009-03-13
  • 打赏
  • 举报
回复
对,呵呵,和编译的环境有关,千万不要写这种代码,没省什么却把脑细胞杀死了,也没有可读性。
Chevin 2009-03-13
  • 打赏
  • 举报
回复
在VC9中为28
步骤应该如下:

a=a+1; (第一个++a,此时a=6)

a=a+1; (第二个++a,此时a=7)

a=a+1; (第三个++a,此时a=8)

b=3*a; (b=3×8=24)


将代码改为:


int a=5;
int b=(a++)+(a++)+(a++);


在VC9中为15

b=3*5;


其实没有实际的意义。
重点是应该区分前++和后++的区别而已。
rgmlkthh 2009-03-13
  • 打赏
  • 举报
回复
这种代码只是在学校考学生而已,真实的项目中,是不会这样写的。
nicky_zs 2009-03-13
  • 打赏
  • 举报
回复
这种代码和这种问题都没有意义,因为C++的标准里面都没有规定它的求值顺序。编译器自己随便实现都无所谓。
npuhuxl 2009-03-12
  • 打赏
  • 举报
回复
的确和编译器有关,不同的编译器可能会结果不一样
主要和求值的顺序不一样有关

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧