输出为什么不是8,而是7?

wangzeba 2003-09-12 04:57:07
下面程序的输出为什么不是8,而是7?
#include<iostream>

using namespace std;
void main()
{
int a,x=4,y=25,z=2;
z=(--y/++x)*z--;
cout<<z;
}
...全文
36 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
TianGuangZao 2003-09-12
  • 打赏
  • 举报
回复
int a,x=4,y=25,z=2;
z=(--y/++x)*z--;
感觉没什么特别呀!基本功呀!估计老板不会反对吧!

首先 --, ++ 比 *, / 优先。
--y 表示本次操作前进行自减 1 运算,
++x 表示本次操作前进行自加 1 运算,
z-- 表示本次操作后进行自减 1 运算,
明白这些后,先来看看参与本次运算各个变量取值:
x = 5, y = 24, z = 2
z= (24/5)*2 = 8
然后 z 还要进行一次自减 1 运算: z = 7
robbinxiao 2003-09-12
  • 打赏
  • 举报
回复
这不就相当于(24/5)*2然后再--么,当然就是7了!
HaiFen 2003-09-12
  • 打赏
  • 举报
回复
这种问题,标准上说由实现定义,实际编程当中没有任何意义,只能拿给那些变态老师整整学生
Yssss1980 2003-09-12
  • 打赏
  • 举报
回复

如果我写这么学术性的代码
估计要被我老板暴扁
这样的话我一定会丧失自信心

你说怎么办吧
lizycheng 2003-09-12
  • 打赏
  • 举报
回复
答案是7
nod
liyong446 2003-09-12
  • 打赏
  • 举报
回复
因为你写是z=(--y/++x)*z--;就如:z=(--y/++x)*z;z--;是这样的原因。
shornmao 2003-09-12
  • 打赏
  • 举报
回复
一个表达式中的子表达式的求值顺序是标准没有明确指出的,运算符的优先级不会改变这一点。
因此,标准中明确指出了:
在一个表达式中超过一次的修改某个变量(可存储的)的值,这样的代码是不可移植的。
按照这个规则,出乎达到数人意料的是,
i=i++,这样的代码,也是不可移植。
tonybaobao 2003-09-12
  • 打赏
  • 举报
回复
同一楼上。
l1ul1u 2003-09-12
  • 打赏
  • 举报
回复
z赋值之后还要做z--这一步
legend-never-die 2003-09-12
  • 打赏
  • 举报
回复
这和编译器有关系,如果是
a=(--y/++x)*z--;
就会是8
z=(--y/++x)*z--;
则z会与表达式中的z--一同进行--运算,原因还有待高手指教,:P

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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