A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 呆呆呆呆孔 中级黑马   /  2015-4-28 22:15  /  736 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.数据溢出:
看下面程序是否有问题,如果有请指出
A:

  1.     byte b1 = 126;
  2.     System.out.println(b1);
复制代码

B:
  1. byte
  2.    b2 = 130;
  3.    System.out.println(b2);
复制代码

C:

  1.    byte b3 =300;
  2.    System.out.prinln(b3);
复制代码

A编译通过
BC编译失败,可能损失精度
byte取值范围是:-128~127;
BC都超范围了
如果对B和C分别做类型强转,那么输出结果是什么呢?

  1.         byte b2 = (byte)130;
  2.         System.out.println(b2)//-126
复制代码

130为int类型4字节32位bit
原码: 00000000 00000000 00000000 10000010       
补码::00000000 00000000 00000000 10000010       
强转为byte类型截取保留后八位
补码:10000010  最高位1,所以为负数
反码:10000001
原码:11111110   -126

   

  1.           byte b3 =300;
  2.           System.out.println(b2);//44
复制代码

300为正数,原码和补码一样,(原码,符号位和数值位组成)
原码:00000000 00000000 00000001 00101100
补码:00000000 00000000 00000001 00101100
强转为byte类型:截取保留后八位(byte一个字节)
补码:00101100   最高位为0   正数
原码:00101100   原码和补码相同,所以结果是44

5 个回复

倒序浏览
异常抛出
回复 使用道具 举报
很正确    明白这个原理就行啦。。呵呵
回复 使用道具 举报
米江波 发表于 2015-4-28 22:27
很正确    明白这个原理就行啦。。呵呵

刚学那会,有点绕不过来,回去问问度娘。慢慢了解了
回复 使用道具 举报
学习了!~
回复 使用道具 举报

同样啊/////////
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马