关于int类型强制转换为byte类型发生精度损失的问题

关于int类型强制转换为byte类型发生精度损失的问题

public class VariableTest{
	public static void main(String[] args) {
		int i1 = 128;
		byte b1  = (byte)i1;
		System.out.println(b1);
 }
}

运行代码,我们会发现输出结果为-128
分析:
计算机底层存储的是二进制01,int占4个字节,等于32位,byte占1字节,等于8位
在底层相当于:

0000 0000 0000 0000 0000 0000 1000 0000

而存储时要把高位的去掉,相当于只有1000 0000
而我们又知道,二进制的最高位是符号位是代表正负的,0正1负
截断后,最高位突然就变成1了,而1代表正,导致我们这个数瞬间变成了负数,而这个数恰好为-128

你可能感兴趣的:(java)