| 
 
| 1.数据溢出: 看下面程序是否有问题,如果有请指出
 A:
 
 复制代码
    byte b1 = 126;
    System.out.println(b1);
B:
 
 复制代码byte 
   b2 = 130;
   System.out.println(b2);
C:
 
 复制代码
   byte b3 =300;
   System.out.prinln(b3);
A编译通过
 BC编译失败,可能损失精度
 byte取值范围是:-128~127;
 BC都超范围了
 如果对B和C分别做类型强转,那么输出结果是什么呢?
 
 复制代码
        byte b2 = (byte)130;
        System.out.println(b2)//-126
130为int类型4字节32位bit
 原码: 00000000 00000000 00000000 10000010
 补码::00000000 00000000 00000000 10000010
 强转为byte类型截取保留后八位
 补码:10000010  最高位1,所以为负数
 反码:10000001
 原码:11111110   -126
 
 
 复制代码
          byte b3 =300;
          System.out.println(b2);//44
300为正数,原码和补码一样,(原码,符号位和数值位组成)
 原码:00000000 00000000 00000001 00101100
 补码:00000000 00000000 00000001 00101100
 强转为byte类型:截取保留后八位(byte一个字节)
 补码:00101100   最高位为0   正数
 原码:00101100   原码和补码相同,所以结果是44
 
 | 
 |