TC 与 VC 中的 ++运算符怎么有区别???

supergerm 2004-09-09 10:05:22
main()
{
int i=3;

printf ("%d", i++*++i+i--*--i);
}

TC里面是 30 VC里面是 25

30我能解释,25是怎么得到的?我解释不了了~

大家说说这是怎么算的?
...全文
125 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
doulikeme 2004-09-09
  • 打赏
  • 举报
回复
这种问题不要去研究了,根据编译器不同结果就是不同的,再说了,这样的代码维护困难,别人也很难看懂,移植性也不好,所以,还是不要钻在这种问题上了。
hcj2002 2004-09-09
  • 打赏
  • 举报
回复
编译器的的计算顺序不同,一个左结合,一个右结合
snow810211 2004-09-09
  • 打赏
  • 举报
回复
看到这种问题我就晕~~
zhangfjj 2004-09-09
  • 打赏
  • 举报
回复
如果是为了解释,只好这么想了
在TC中
i++*++i+i--*--i
i++ 为3,i为4
++i 为5, i为5
i-- 为5,i为4
--i 为3 i为3

VC中还真不好说,不知它是如何处理连续的自增运算的。

#include <cstdio>
int main()
{
int i=3;
printf("%d",i++*++i);
return 0;
}
结果是16

#include <cstdio>
int main()
{
int i=3;
printf("%d",i--*--i);
return 0;
}
结果却是4
这种烂题,怕只有一些有考据癖的谭浩强之流才会想得出来。


ftkghost 2004-09-09
  • 打赏
  • 举报
回复
结果与编译器有关的
我以前也遇到过,这种东西没必要太深入研究,你只要知道左结合和右结合是怎么回事就行了。
  • 打赏
  • 举报
回复
不同编译器对一段代码的解析可能不同,对于25是以下计算的
* 的结合顺序是从右到左,先算右边++i = 4,再算左边 i++ =4
在同一个计算式中,计算式没结束,i++的结果就不能体现在i上,
所以 i++ * ++i 后i的值仍为4,
i-- * --i 同理可算:--i = 3,i--=3
结果就是4*4 + 3 *3 = 25
zbstone 2004-09-09
  • 打赏
  • 举报
回复
没有不同,只是编译器的编译方式不同
一个是左结合,一个是右结合

69,369

社区成员

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

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