java中的陷阱,看看你掉进去了么! 我自己的理解。

本文探讨了Java中2.0-1.9的浮点数运算结果,并深入分析了位运算进行变量交换的过程及原理。通过具体的代码实例解释了为何会出现预期之外的结果。

2、浮点数想减

System.out.println(2.0-1.9);  
System.out.println(2.0-1.9); 

上面会打印0.1么?

这个不明白,求指点。

3、交换

int x = 2010; 
int y = 2012; 
x^=y^=x^=y;
System.out.println("x= " + x + "; y= " + y);

x、y的值互换了么?

自己试了下,y的成功换成了2010,x则变成了0,

按照我的理解,

 

x^=y^=x^=y;

这一行应该是转换成这样子运行的:

x = x^y;

y = y^x;

x = x^y;

事实也证明上述三行代码能成功互换 x 和 y 的值。但是为什么不行呢?

最后我把它转换成了这样子:

 

x = x^(y = y^(x = x^y));

 

这样好像容易理解为什么 x 是 0。

x = x^y 的内容应该是没有来得及改变 x = x^(...)  里面第二个 x 的内容,也就是说仍然是其初始值2010。

而括号里面的内容也就是 y 的值被修改成了 x 的值 2012。

于是,最后变成了 x = 2012 ^ 2012。当然 x 的值是  0。

但是为什么括号里面对 x 的重新赋值没有影响到,括号外面的 x 的值呢?

仅仅是因为这是一个位运算?

求大师指点。

 




 

转载于:https://www.cnblogs.com/lanfengniao/archive/2013/05/05/3061125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值