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 的值呢?
仅仅是因为这是一个位运算?
求大师指点。