x+=x
2019独角兽企业重金招聘Python工程师标准>>>
原问题:
第一种情况:
int x=6;
问执行下列语句后x的值
x+=x-=x*x;
这个答案是-24。
首先明确一点赋值操作从右向左进行,而且这是一次赋值。
(一次赋值就是这是一个式子,式子中间产生的值不会马上赋值回去,而是等整个式子运算结束)
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。
这是两步操作,所以产生的‘中间值‘’赋值回去了。这是非一次赋值
所以
第一步操作;
x-=x*x; => x=x-x*x
=6-6*6
=-30
第二部操作;
x+=x; => x=x+x (这俩x一样,是上一步的x改变后赋值回去的-30)
=-30+(-30)
=-60
转载于:
x+=x
2019独角兽企业重金招聘Python工程师标准>>>
原问题:
第一种情况:
int x=6;
问执行下列语句后x的值
x+=x-=x*x;
这个答案是-24。
首先明确一点赋值操作从右向左进行,而且这是一次赋值。
(一次赋值就是这是一个式子,式子中间产生的值不会马上赋值回去,而是等整个式子运算结束)
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。
这是两步操作,所以产生的‘中间值‘’赋值回去了。这是非一次赋值
所以
第一步操作;
x-=x*x; => x=x-x*x
=6-6*6
=-30
第二部操作;
x+=x; => x=x+x (这俩x一样,是上一步的x改变后赋值回去的-30)
=-30+(-30)
=-60
转载于: