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
|
|