梦书之家(移动开发)

你有一个苹果,我有一个苹果,我们交换一下,一人还是一个苹果;你有一个思想,我有一个思想,我们交换一下,一人就有两个思想。 ——肖伯纳

导航

Java学习3

今天在写程序的时候,对下面的代码感到疑惑:

int i = 0;
System.out.println( (i-1)/10 ); //输出为0

 

 于是自己分析了下:

以上的代码相当于

int i = (int)-0.10;
System.out.println( i );

 

double类型的-0.10被强制转化为int类型 ---》 -0 负0  (0x80000000)其补码为:

取反(符号位不变其他位取反): 0xFFFFFFFF

加 1: 0x00000000 (最高位因溢出,自动丢失)

而Java代码中对数值的保存采用补码来保存,而正0与负0的补码是一样的

所以 -0 == +0.

所以最初的代码相当于

System.out.println( 0 );

 

posted on 2010-08-25 17:47  梦书  阅读(202)  评论(0)    收藏  举报