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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© l631356126 中级黑马   /  2015-9-6 21:43  /  398 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte  b = 130; 这句为什么不对! 怎么改?

7 个回复

倒序浏览
横创 来自手机 中级黑马 2015-9-6 21:57:08
沙发
不会!!
回复 使用道具 举报
byte 类型范围是-128 到127 超出范围了  所以要提升为 int类型
回复 使用道具 举报
byte b = (byte)130;
回复 使用道具 举报
byte b=(byte) 130;
回复 使用道具 举报

这个结果b=-126,因为130超出127
回复 使用道具 举报
因为130超出了byte取值范围,byte取值范围为-128到127。所以编译就会失败报错。这时候需求强制转换,byte  b = (byte)130。然而,这样强制转换,
本来130是int四字节对吗,二进制为 0000-0000 0000-0000 0000-0000 1000-0010对吧,强制转换之后就把前面三个字节砍了。然后就变成byte 10000010,而且byte 的最高位为1负数。所以我们需要知道他的原码才知道这个数值是几。由于计算机运算时用补码进行运算的。
所以此时就是该数字的补码:1000-0010,我们需要-1求反码 得:1000-0001,那么原码就是:1111-1110。这个数就是-126。
回复 使用道具 举报
1111-1110怎么算,知道吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马