public class diff{
public static void main(String[] args) {
int i1 = 500;
byte i2 = (byte)(i1/2);
System.out.print(i2);
}
} 为什么强制转换后输出结果是-6

解决方案 »

  1.   

    这可不是整型之间的转换哦,int和byte强制转换会有位数丢失,数字范围超出-128—127,就会循环类在此范围内。byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。int是整型数据类型,是有符号型的,占用4个字节,大小范围为:-2147483648到2147483647。
      

  2.   

    i1/2 = 250,二进制为00000000,00000000,00000000,11111010,转换成btye,会变成11111010,高为是1,则为负数,负数转成10进制
    1:取反,11111010取反00000101
    2:加1,00000101+1 = 00000110  是6
    则为-6
      

  3.   

    i1/2值为250,二进制码为11111010,强制转换为byte类型,byte8位二进制码的首位为符号位,所以11111010为一个负数,按补码规则,除符号位外各位取反加一,所以就成了-0000110就是-6。