1)机器数,比如11111111,如果是无符号的,应该是255,如果是有符号的,应该是-127
我想问下,电脑是怎么判断,这个数字什么时候是有表示带符号的呢?
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的
采用8位二进制表示时,整数补码的表示范围:
最大为01111111,其真值为(127)10

最小为10000000,其真值为(一128)10
补码最小数表示-128 是怎么计算的呀?
按照 10000000 先求反 11111111,然后加1,貌似8位码表示不了了呀,请赐教

解决方案 »

  1.   


    public class OutputBinary {
    public static void main(String[] args) {
    System.out.println(Integer.toBinaryString(-128));
    System.out.println(Integer.toBinaryString(-127));
    System.out.println(Integer.toBinaryString(-126));

    System.out.println(Integer.toBinaryString(-1));
    System.out.println(Integer.toBinaryString(0));
    System.out.println(Integer.toBinaryString(1));

    System.out.println(Integer.toBinaryString(126));
    System.out.println(Integer.toBinaryString(127));
    }
    }
    /*
    11111111111111111111111110000000
    11111111111111111111111110000001
    11111111111111111111111110000010
    11111111111111111111111111111111
    0
    1
    1111110
    1111111
    */
      

  2.   

    java貌似是把8位拉长成32位来处理的,拉长的时候位数不足的左边补符号位128的原码是10000000拉成32位,前面补符号位00000000000000000000000010000000反码+1就成了11111111111111111111111110000000然后截断成8位,直接去掉前面的符号位就成了10000000当时好像是在查byte值   &0xff的时候看到的,很久了,不知道是不是的