byte=130(为byte类型赋值超长度的内容)

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
             */
      }
}


你可能感兴趣的:(JAVA)