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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java陈辉 中级黑马   /  2013-12-27 14:29  /  1241 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面这段代码的b2的结果为什么是-76?怎么会出现了负数?求解释。
byte b1=60+20;
byte b2=(byte)(b1+100);
System.out.println(b2);            //b2=-76,为什么是-76,怎么会出现了负数?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
180->超过Byte的取值范围,2进制为:10110100
你再强制转换就是将这个数变成10进制,所以是负数,至于76,你看我下面的运算
1001011+1=1001100

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
180二进制是  (00000000 00000000 00000000 ) 10110100 因为byte的范围是-128~127
所以超出范围 那么强转之后 取反
二进制  01001011 第一个0是符号位   -75
再减1 就是-76

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你算完之后为180超出了byte的范围是(-128~127)
二进制为10110100 取反结果为 01001011
也就是  -75
再减1 就是-76

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
因为你强转了b1+100,而byte的最大范围是证的127,这个值超出了byte的最大范围
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马