java中关于++的算数问题

因为上学很久没写博客了,这几天学校考试,C语言中遇到一道题,伪代码如下:

int x;

x=6;

问x+=x-=x*x的答案,

一开始我觉得挺简单的,后来越想越不对劲,然后干脆运行一下,结果发现很复杂。

java对上述结果运算是-24,C却是-60。

然后查阅资料才把事情搞明白。

                                            公布原因

主要原因:java有个中间变量缓存的机制。

原因探究:首先来看看java和C对a++和++a的解释,这些都一样,a++是先运算后再给a+1,而++a是先给a+1再让他运算。

那么问题出在那里呢?经过多次思考和查阅资料,我认为是这样的,先看如下代码:

   


运行结果如下

        结果发现a++和a=a++完全是两码事,java的中间变量缓存机制对此的解释是:

在java中对变量执行自增自加算术时,会先给变量创建一个同类型的temp,将变量的值先赋给temp,然后让temp去参与运算,最后返回temp,值得注意的是a++是先temp=a,然后temp=temp+1;而++a是先a=a+1,再temp=a。这样就解释了为什么同样的运算在java和C中会有两个不同的结果。

    最后总结一下


虽然以上代码可能对a++和++a的阐释不全面,但大概就这个意思。在最上方的算术x+=x-=x*x中,x在运算时始终保持着6这个值,因为参与运算过程的是temp,相当于:temp=x=6,x=temp+temp-temp*temp;而C中相当于这样:x=6,x=x-x*x,x=x+x。x的值从6变成-30,然后变成-60。这就是java和C运算时的差别。

                  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值