黑马程序员技术交流社区
标题:
关于数据溢出问题
[打印本页]
作者:
呆呆呆呆孔
时间:
2015-4-28 22:15
标题:
关于数据溢出问题
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
作者:
李彦宏是2B
时间:
2015-4-28 22:22
异常抛出
作者:
米江波
时间:
2015-4-28 22:27
很正确 明白这个原理就行啦。。呵呵
作者:
呆呆呆呆孔
时间:
2015-4-28 22:31
米江波 发表于 2015-4-28 22:27
很正确 明白这个原理就行啦。。呵呵
刚学那会,有点绕不过来,回去问问度娘。慢慢了解了
作者:
kayaking
时间:
2015-4-28 22:46
学习了!~
作者:
呆呆呆呆孔
时间:
2015-4-30 06:54
kayaking 发表于 2015-4-28 22:46
学习了!~
同样啊/////////
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2