首页 新闻 会员 周边

a/a++为什么结果是1.33333

0
悬赏园豆:5 [待解决问题]

include<iostream>

using namespace std;
int main(){
double a=3;
double b;
b=a/a++;
cout<<b;
return 0;
}
为什么结果是1.33333

c++
#xuexi的主页 #xuexi | 初学一级 | 园豆:197
提问于:2019-12-08 20:45
< >
分享
所有回答(6)
0


我用的codeblocks,结果是1没错,你用的是什么编辑器

编程小大白 | 园豆:530 (小虾三级) | 2019-12-08 22:04

dev c++

支持(0) 反对(0) #xuexi | 园豆:197 (初学一级) | 2019-12-26 10:44
0

不同的编译环境得到的结果不一样,可以看一下谭浩强的C。

Jeremy.Wu | 园豆:48 (初学一级) | 2019-12-09 14:57
0

这个在c标准里面没有定义,具体的结果跟编译器的实现有关,不要钻牛角尖。

从你的结果看,编译器应该是先做了a++后再去除的。

尽量不要写这种复杂的自增自减,结果不可预测,实在要写,用中间变量过渡一下。

firstrose | 园豆:234 (菜鸟二级) | 2019-12-11 14:17
1

运行时 值发生了变化

黄子琪 | 园豆:219 (菜鸟二级) | 2019-12-11 15:22

具体过程是怎么变化的呢?

支持(0) 反对(0) #xuexi | 园豆:197 (初学一级) | 2019-12-26 10:44

@#xuexi: 你看 b = a/a++ 按照正常的逻辑是3/4得到0.75 但是a++此时是没有增加值的 乘除运算先走右 得到3 但是走完 值就+1了 再走左边a 得到4 也就是b=4/3 得到1.3...

支持(0) 反对(0) 黄子琪 | 园豆:219 (菜鸟二级) | 2019-12-26 12:31

@黄子琪: 谢谢你的讲解,让我恍然大悟,乘除运算先走右边再走左边,这些观点有什么书可以参考吗?因为关于要给别人讲解,需要有一定的依据

支持(0) 反对(0) #xuexi | 园豆:197 (初学一级) | 2019-12-27 10:15
0

这玩意就是 UB,即未定义行为,运行结果由编辑器决定。可以到网上去查一查有关这方面的知识。

平时写代码时建议遇到这种运行顺序不确定的地方就多打打括号。

Aehnuwx | 园豆:263 (菜鸟二级) | 2020-04-01 21:43
0

优先级的问题,这里先算了a++

全角的!与半角的! | 园豆:138 (初学一级) | 2022-11-23 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册