永发信息网

c++一个诡异的问题

答案:5  悬赏:10  手机版
解决时间 2021-08-15 01:57
  • 提问者网友:斑駁影
  • 2021-08-14 06:38
#include using namespace std;int main(){ int a=1,b=2,c; c=(++a/b)+(--b); cout<<c<<endl; return 0;}这个左边括号和右边都得1,但是相加怎么会得3呢
最佳答案
  • 五星知识达人网友:拾荒鲤
  • 2021-08-14 07:53

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


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


原因如下:


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


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


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


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

全部回答
  • 1楼网友:拾荒鲤
  • 2021-08-14 10:50
这个表达式++a/b等价于++(a/b)因为除号/的优先级高于++,所以先做除法得1再自加1得2,加上b--,所以最后应该是3
  • 2楼网友:神也偏爱
  • 2021-08-14 09:34

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

  • 3楼网友:未来江山和你
  • 2021-08-14 09:16

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

先算:--b得到1;

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

最后:2+1=3

  • 4楼网友:山君与见山
  • 2021-08-14 08:32
c=(2/1)+1;当然等于3;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯