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 );
浙公网安备 33010602011771号