byte的长度是-127~128,目前需要赋值130,会出现什么情况;
首先会出现编译错误,会报出丢失精度,如果不报错可以强制类型转换,将130强转成byte
直接上代码解释:
/** * 练习:byte b = 130 * @author wangjg * */ public class Byte130 { public static void main(String[] args) { // 此行编译会报错,byte类型的数据范围是-127到128,130超过了它的范围会报丢失精度 // byte b = 130; // 修改方法是强制转换 byte b = (byte) 130; // 打印结果 System.out.println(b); /** * 结果是:-126 * 分析过程: * 我运行发现结果是-126,我想知道为什么是这个结果,那么就需要知道计算机是如何计算的 * 在计算机内存中数据的运算都是通过补码的方式进行的; * 而且要得到补码,我们需要计算出数据的二进制。 * * A:获得130这个数值的二进制 * 1、130首先是一个整数; * 通过8421码的方式我们可以计算出128的二进制是10000000; * 128+2为130,所以130的二进制是 * 10000010 * 2、130为int类型,占4个字节,所以空白位需要补齐 * 00000000 00000000 00000000 100000010 * 这个码是原码,看最高位是0表示正数,已知正数的原码反码补码都一致 * *B: 做截取操作,把int类型截成byte类型,int为4位,byte未1为,截取后的数据为 * 10000010 * *C:已知补码求原码 * 符号位 数值位 * 补码 1 0000010 * * 反码 1 0000001 * * 原码 1 1111110 * * * 1111110为126,符号位1为负数,所以值为-126 */ } }