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

内存溢出之后结果问题

int a = Integer.MAX_VALUE;
int b = Integer.MIN_VALUE;
long c = a-b;
System.out.println(a);//2147483647
System.out.println(b);//-2147483648
System.out.println(c);//-1
//由于a-b得到的数据仍然为int型,但是int已经不能表示这个数字(长度过大)
//所以出现内存溢出,

问题:内存移出后,为什么结果会是-1,而不是其他的什么数值?
------解决方案--------------------
可以转化成二进制自己算一下
MAX: 0111  1111   1111   1111   1111   1111   1111   1111   
MIN: 1000   0000   0000   0000   0000   0000    0000   0000
二者之差:
            1111 1111   1111   1111   1111   1111   1111   1111   
首位是1说明是负数,剩余的二进制位按位取反:
             0000  0000   0000   0000   0000   0000    0000   0000
然后加1,就是:
             0000  0000   0000   0000   0000   0000    0000   0001
就是1,因为是负数,所以就是 -1