x+=x-=x*x; 和 x-=x*x; x+=x;

原问题:

第一种情况:

int x=6;

问执行下列语句后x的值

x+=x-=x*x;

这个答案是-24。

210449_xrnV_2885163.png

首先明确一点赋值操作从右向左进行,而且这是一次赋值

(一次赋值就是这是一个式子,式子中间产生的值不会马上赋值回去,而是等整个式子运算结束)

x-=x*x   => x=x-x*x

                    =6-6*6    

                    =-30  (这是中间值不影响没参与运算的x)

x+=x   =>  x=x+x   (这俩x一个是原来的值,一个是中间值)

                    =6+(-30)

                    =-24 

这是编译器的优化,只有完成一个式子的时候才往回赋值。

 

看第二种情况:

int x=6;

问执行下列语句后x的值

x-=x*x;

x+=x;

问这两步操作后的x。

这个答案是-60。

210546_vdWl_2885163.png

 

这是两步操作,所以产生的‘中间值‘’赋值回去了。这是非一次赋值

所以

第一步操作;

x-=x*x;  => x=x-x*x

                    =6-6*6    

                    =-30  

第二部操作;

x+=x;   =>  x=x+x   (这俩x一样,是上一步的x改变后赋值回去的-30)

                    =-30+(-30)

                    =-60

 

转载于:https://my.oschina.net/zjllovecode/blog/1572468

  • 17
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值