网上有一个哥们说(byte)128 输出为-28 原因是: 10000000 取反为01111111 我有点迷糊~~ 符号位不是不变吗?到底是不是10000000 在计算机中只会当初-128

解决方案 »

  1.   

    (byte)128已经越界了,byte的范围是-128-127,你输出要输出(byte)128的话数据就溢出了,自然输入-128了。计算中存的是补码,正数的原码,反码和补码相同,对于负数取补码,符号位是1,数值位是将原码按位取反再在最低位加1.
      

  2.   

    byte只有8位 10000000根本就不是通过源码计算出来的 谈何取反
    (byte)128 输出为-128  
    在System.out.println((byte)128));中128会被认为是int类型  
    它的补码是 00000000000000000000000010000000 不是10000000 
    (byte)128的存储为  10000000 而不是  00000000000000000000000010000000
    在byte中 10000000(注意这是补码)比较特殊 没有任何源码在转补码时能转换为 10000000(在byte类型中)
    人为规定 10000000 就是-128换个一般的例子 存在对应源码的 比如说 System.out.println((byte) 131);输出为多少 这样计算
    131 的补码是 00000000000000000000000010000011  从int到byte 去掉前面24个0 得到
    (byte) 131的补码是 10000011
    (byte) 131的反码是 10000010
    (byte) 131的源码是 11111101
    在byte中  源码是 11111101 的二进制整数是 -125  
    所以System.out.println((byte) 131); 输出 -125