java文件中
int max=0x7fffffff;
long lo=max+1;
System.out.println(lo);
lo=(max+1)*2;
System.out.println(lo);现问:第一个输出为什么会是-2147483648,第二个输出为什么会是0
thanks

解决方案 »

  1.   

    第一个是符号位溢出,第二个是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
      

  2.   

    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