日期:2014-05-20  浏览次数:20860 次

java数据类型的小问题,在线等
java文件中
int max=0x7fffffff;
long lo=max+1;
System.out.println(lo);
lo=(max+1)*2;
System.out.println(lo);

现问:第一个输出为什么会是-2147483648,第二个输出为什么会是0
thanks

------解决方案--------------------
第一个是符号位溢出,第二个是int型溢出。

你直接看看:
int a = 0x7fffffff;
int b = 0x80000000;
int c = 0xffffffff + 1;
int d = 0x80000000 * 2;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);

2147483647
-2147483648
0
0

------解决方案--------------------
对就是数据溢出的问题
------解决方案--------------------
0x7fffffff的二进制0111 1111 1111 1111 1111 1111 1111 1111
max+1为:1000 0000 0000 0000 0000 0000 0000 0000即-2147483648最高位为符号位...
*
其中1是 0000 0000 0000 0000 0000 0000 0000 0001
----------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000

故结果为0