假设不管java中是怎么存储的,单以首位1表示负号,其余位表示实际的正数数字,则其余位最大为7个1,111 1111,这不正是127?加上前面的负号应该为-127呀。怎么搞的。

解决方案 »

  1.   

    one's complement里有负0,不过一般都是用two's complement
      

  2.   

    不管是 byte、short、int、long,都存在楼主说的问题以字节为例,因为如果最高位作符号位,那么就会出现“正0 ”和“负0 ”:
    0000 0000
    1000 0000而其实0是不分正负的,但是上面的表示方法明显是重复了
      

  3.   

    但1楼的哥们说,1 0000000 表示-128,这个好像不对,-128到底是怎么表示的.昨天查了core java,对这些根本没有讲解.
      

  4.   

    1000 0000  减 1 取反是 1000 0000 即 128,因此 byte 的 1000 0000 为 -128
      

  5.   

    这个不是 java 的问题,而是计算机内部的数值表示方法,就算你用C语言也是这么回事一般来说,计算机科学表示数值的方法有:原码、反码和补码,现在的计算机用补码存储整数数值
    原码,就是用二进制表示的原始编码,
    反码,就是除符号位外,其它位取反
    补码,正数的被码等于原码,负数的被码等于反码加1你可以用下面的代码来验证1楼说的是否正确:
    byte b = (byte)-128;
    int x = 0x01;
    for(int i=7; i>=0; i--) {
    int a = b >> i;
    if((a & x) == 0)
    System.out.print(0);
    else
    System.out.print(1);
    }
      

  6.   

    1000 0000确实是-0!!
    计算机内部“硬性”规定了-0表示负数的最大值! 这个大学计算机教程了有说的!
    看看这个:
    http://www.flatws.cn/article/program/c/2010-06-09/6679.html