class Test{
 public static void main(String args[]){
    byte b=(byte)129;
    System.out.println(b);
   }
}
为什么输出的b为-127?
class Test{
 public static void main(String args[]){
    byte b=(byte)127;
    System.out.println(b);
   }
}
而正常输出127呢?是不是与byte的取值范围有关?
高手帮帮解释下。

解决方案 »

  1.   

    对取值范围:
    byte: -128 - 127
      

  2.   

    129也就是
    1000 0001
    byte范围为-128~127,也就是说这个数在byte里第一位就成了符号位了,1代表负数,要求得他的值,就得求补码,补码就是反码+1
    反码为
    1111 1110
    再加1
    1111 1111
    也就是-127
      

  3.   

    129的二进制:10000001
    129先以int型存储,129为整数,其补码不变,int为32位,所以存储后为0000 0000 0000 0000 0000 0000 1000 0001
    强制转换为byte,byte为8位,所以取int型的后8位,即1000 0001,byte仍然认为这是一个补码表示的数.
    首位为符号位,1表示负数,后7位求原码(减1后按位取反),得到 111 1111,即10进制的127,加符号位-,得到-127.