为什么说Java的强转会精度损失?
强制类型转换规则: 容量大的转为容量小的数据类型,使用时加上强转符号,也就是高精度->低精度转换
例:
byte b = (byte) 1000;
System.out.println(b); // 为什么这里会造成精度溢出? 输出结果为:-24
我们知道在java种 ‘int’ 是 4 字节,每个字节占 8 bit,而**‘byte’**是 1 字节。
得出结论: int -> byte 32bit->8bit`
int a = 1000;
// 十进制 1000 的二进制则是: 00000000 00000000 00000011 11101000
// 所以 32bit 只取 8bit 得到 byte // 11101000
// 11101000 在二进制中: 最高位为符号位 0表示正数 1表示负数
// 在计算机中运算时 都是以补码进行运算
// 11101000 -> 反码: 符号位不变其余位取反 10010111
// 反码: 10010111 -> 补码:反码+1 10011000
// 由于 10011000 符号位是1 所以是负数 最终结果为 -24
byte b1 = (byte) a;
System.out.println(b1); //-24