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 的值呢?

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

求大师指点。

 




 

posted on 2013-05-05 16:25  lanfengniao  阅读(132)  评论(0编辑  收藏  举报