为什么为什么下面代码的输出结果分别是
-130
126
-127
-127
-128
-128
请牛人详细解释一下如何截位处理 正负号又是怎么处理的 谢谢!
public class Test {
    public static void main(String[] args) {
     short a=-130;
     byte  b=(byte)a;
    
     short c=-127;
     byte  d=(byte)c;
    
     short e=-128;
     byte  f=(byte)e;
        
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);
        
    }
}

解决方案 »

  1.   

    short转byte的时候是对short的低8位进行截取,然后取补码得到
    a 的类型为short,2个字节16位,-130对应的二进制值是1000000010000010,对应十进制就是-130
    b 的类型为byte,1个字节8位,截取a的低8位取补码就是01111110,对应十进制就是126
    c 的类型为short,2个字节16位,-127对应的二进制值是1000000001111111,对应十进制就是-127
    d 的类型为byte,1个字节8位,截取a的低8位取补码就是11111111,对应十进制就是-127
    e 的类型为short,2个字节16位,-128对应的二进制值是1000000010000000,对应十进制就是-128
    f 的类型为byte,1个字节8位,截取a的低8位取补码就是10000000,对应十进制就是-128
      

  2.   

    short转byte的时候是对short的低8位进行截取,然后取补码得到 
    a 的类型为short,2个字节16位,-130对应的二进制值是1000000010000010,对应十进制就是-130 
    b 的类型为byte,1个字节8位,截取a的低8位取补码就是01111110,对应十进制就是126 
    c 的类型为short,2个字节16位,-127对应的二进制值是1000000001111111,对应十进制就是-127 
    d 的类型为byte,1个字节8位,截取c的低8位取补码就是11111111,对应十进制就是-127 
    e 的类型为short,2个字节16位,-128对应的二进制值是1000000010000000,对应十进制就是-128 
    f 的类型为byte,1个字节8位,截取e的低8位取补码就是10000000,对应十进制就是-128
      

  3.   

    short转byte的时候是对short的低8位进行截取,然后取补码得到 
    a 的类型为short,2个字节16位,-130对应的二进制值是1000000010000010,在计算机里存的是补码的形式0111111101111110,对应十进制就是-130
    b 的类型为byte,1个字节8位,截取a的低8位取补码就是01111110,对应十进制就是126 
    c 的类型为short,2个字节16位,-127对应的二进制值是0111111110000001,对应十进制就是-127
    d 的类型为byte,1个字节8位,截取c的低8位取补码就是11111111,对应十进制就是-127 
    e 的类型为short,2个字节16位,-128对应的二进制值是0111111110000000,对应十进制就是-128 
    f 的类型为byte,1个字节8位,截取e的低8位取补码就是10000000,对应十进制就是-128