BYTE类型的数只有一位.如果我把一个INT类型的数(128);强制转为BYTE型.结果应该是-128.而INT类型(128)对应的二进制数应该是10000000.不理解怎么来负数.请牛指点一下.
  自学者,不要见笑!

解决方案 »

  1.   

    128的二进制是10000000,后面7个零,你多算了一个零,Java虚拟机在进行强制数据类型转换时,如int转byte,抛弃高八位.
      

  2.   

    Java中的Int型是32位的,即4byte,舍弃高24位,去最后八位(1byte)
      

  3.   

    最高位是符号位int: 原码: 00000000000000000000000010000000 反码: 01111111111111111111111101111111 补码: 01111111111111111111111110000000转换为Byte时多取一位符号位:byte: 补码: 110000000 反码: 101111111 原码: 110000000最高位1表示负数,十进制就是-128了
      

  4.   

    最高位是符号位int:原码:00000000000000000000000010000000反码:01111111111111111111111101111111补码:01111111111111111111111110000000转换为Byte时多取一位符号位:byte:补码:110000000反码:101111111原码:110000000最高位1表示负数,十进制就是-128了这个搞不太明白?转换为Byte时多取一位符号位:
    ???是这样子吗?