public class Test{
  public static void main(String args[]) {
    int x = 0x80000000;
    System.out.println(x);
  }
}
打印结果为:-2147483648
对以上这个结果,我分析是这样的:
转化为二进制为: 1000 0000 0000 0000 0000 0000 0000 0000
转化为十进制为: 2的32次方,应该为2147483648,但是为何是负数,小弟就不是很明白了,望指点一二,先谢了!
          

解决方案 »

  1.   

    java中的int型是32位 表示范围 -2~32 ~ 2~31上面的16进制转为2进制,溢出了
      

  2.   

    还是不是很明白是怎么来的,java 中 int 的取值范围是-2的31次方至2的31次方减一。
    0x80000000 转为二进制后为1000 0000 0000 0000 0000 0000 0000 0000 
    如果1是表示为符号位,那谁来表示1X2的31次方呢?
    更奇怪的是如果改为: int x = -0x80000000;
    打印出来还是-2147483648
    不知是何原因,望哪位明白的能够解释明白,先谢了!
      

  3.   

    JAVA中负数才用补码表示,正数是用原码表示的,int型变量的取值范围是(-2)~31--(2)~31-1
    楼主的取值比int型变量的最大取值大了1。溢出了!