public class 数据类型转换 {
      public static void main(String[] args) {
byte b;
int i=128;
b=(byte)i;//数据越界
System.out.println(b);
}
}-128;数据越界的结果为什么会是-128而不是其他?初学JAVA望高手指点一二!

解决方案 »

  1.   

    byte 的数据范围是-128  ~ 127
    128属于越界。
      

  2.   

    byte是8位的,-2的7次方 ~~ +2的7次方-1 也就是-128  ~ 127 
      

  3.   

    128超出了范围:127,因此结果为:-128+(128-127);其中前边的-128为byte的下线,128为你输入的int数,127为byte的上线
      

  4.   

    因此结果为:-128+(128-127)-1;其中前边的-128为byte的下线,128为你输入的int数,127为byte的上线
      

  5.   

    128对应的二进制是10000000,而二进制10000000对应的byte就是-128
      

  6.   

    有谁可心说说00000000是0不是-0吗?可不写一个java程序验证^_^
      

  7.   

    二进制10000000对应的byte,上面的问题其实就是为什么会是-128?有谁能具体讲讲,非常感谢!
      

  8.   

    java的负数是用补码(反码+1)表示的,int和byte的占位不同就有了上面的结果
    int里
    128:00000000000000000000000010000000
    -128:11111111111111111111111110000000byte里
    126:01111110
    127:01111111
    -127:10000001
    -128:10000000可是byte只占1位,强转之后丢失高位:
    本来的128就变-128了