问题引入,上代码
public class AutoVarConver{
public static void main(String []args){
int x = 2000;
byte x1 = (byte)x;
System.out.println(x1);
}
}
大家觉得答案是多少?2000?127?
正确答案
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e987620d5ad7866f02385f92e2454c5d.png)
原因分析【要有计算机组成原理知识】
由于计算机以补码形式存放数据,2000补码为:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fbcb38a9790cb40dae81059e9d31c48f.png)
byte占一个字节(8位2进制)所以范围-127-127;
取上述二进制后八位即11010000,补码形式转换为十进制结果为-48.