为什么呢?一直搞不明白

解决方案 »

  1.   

    int 类型的数据是4个字节,每个字节8位,所以int范围应该是-2^31到2^32
      

  2.   

    这是因为整数在内存中使用的是补码的形式表示,最高位是符号位,0表示正数,1表示负数:
    例如一个8位的整数
    正数的补码:为这个数的2进制码,例如3:0000 0101
    负数的补码:为这个负数的绝对值的2进制码,取反加1,例如-3:
       a: 3的2进制码取反为: 1111 1010
       b: 加1:1111 1011
       c: 所以-3的补码是:1111 1011从补码计算这个数:
    从一个正数的补码计算这个正数,例如0000 0101:因为符号位是0,所以是正数,所以直接计算这个正数就行了,所以结果是 3从一个负数的补码计算这个负数,例如-3:1111 1011:
       a: 因为符号位(最高位)为1,所以表示这个数是负数
       b: 用补码取反加1为这个负数的绝对值整数值:0000 0100 + 1 => 0000 0101 => 3
       c: 所以1111 1011的值为-3例如:
       byte b = 127;
       b = (byte) (b + 1);
    最后b的值是多少?
       127的二进制为: 0111 1111
       127+1则为:0111 1111 + 1 = 1000 0000
    所以当计算1000 0000的值时,
       a: 最高位为1,所以是负数
       b: 取反加1:0111 1111 + 1 = 1000 0000
       c: 计算1000 0000的值:128
       d: 结果:128的负值,所以为-128,即byte类型的127加1的值为-128
      

  3.   

    这个是组成原理的知识,跟java没有关系。
      

  4.   


    现在搞Java不需要计算机专业
      

  5.   

    个人理解..
    int 是32位的 左边1位是符号位 其他31位是数值位 
    最大的正整数 符号位是0 其他位都是1 
    这个数+1进位之后 符号位变成1 其他位变成0  就是最大的负整数
    不知道解释的对不对
      

  6.   

    int 的取值范围是 -2147483648 ——2147483647 
    2147483647  的二进制数是1111111 11111111 11111111 11111111 + 1 =
    10000000 00000000 00000000 00000000  就是-2147483648