永发信息网

c++一个诡异的问题

答案:5  悬赏:10  手机版
解决时间 2021-08-15 01:57
#include using namespace std;int main(){ int a=1,b=2,c; c=(++a/b)+(--b); cout<<c<<endl; return 0;}这个左边括号和右边都得1,但是相加怎么会得3呢
最佳答案

分开算,两个括号都是1,加起来应该是2.


但是,两个括号做了运算,就不再是2了,而是3.


原因如下:


c的计算过程是先计算(--b),然后计算(++a/b),最后计算(++a/b)+(--b)。


所以,当(--b)运算完成后,b=1,再计算(++a/b)时就变成了2/1=2


最后计算括号相加,理所当然就是结果3。


在C++里,通常算数运算的顺序都是从右到左,明白了么?

全部回答
这个表达式++a/b等价于++(a/b)因为除号/的优先级高于++,所以先做除法得1再自加1得2,加上b--,所以最后应该是3

先算++a=2  --b=1 就等于 因为--b优先级高 就等于 c=(2\1)+1  所以等于3

对于特定的编译器,其运算顺序是不同的,此例中若从后边开始运算而且运算规则是变量的值修改后即刻生效那么即可得到3的答案:

先算:--b得到1;

再算:++a/b得到2/1=2;

最后:2+1=3

c=(2/1)+1;当然等于3;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
新手学车要学多久?
怎样才能写好一篇自述散文?
如何删去qq空间中的模块?
如何鉴赏诗词的作文,古诗赏析作文该怎么写
我想换掉以前没有换过大牙,现在快19岁了还会
放手算不算是爱
寻仙怎么解除帮顶物品?
石鼓区衡阳天之道足浴(石鼓店)地址在哪,我要
31耳麦41耳麦51耳麦等等这些在享受过程有什么
QQ空间新加的应用看电影,杂个我会找不到哪里
近代历史欧洲列强国家什么时候对中国采取什么
QQ群怎么弄?
想买个2000到3000的笔记本玩大话西游不卡的,
左耳耳鸣持续十个小时了是怎么回事?
汽车车名大全
推荐资讯
为什么电脑开机以后什么也没有,一片空白。
关于头发颜色问题 怎么使头发颜色变淡
健康网站大全
保险杠划痕修复多少钱,车子划痕修复要多少钱
何不试之以足?的意思是什么?
黄陂区武汉川香人家(巨龙大道)地址有谁知道?
不会哭,是成长,还是悲哀?
周杰伦牛仔很忙MV里的服装在哪能买到?
好听的英文歌曲,介绍一些吧
求小说《龙舞飞天》的VIP部分
什么样的性格决定什么样的命运
我上个月二十四号来的例假,这个月七号到十号
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?