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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有2个byte类型的变量bb=126、bb2=5,当执行bbl=(byte)(bb+bb2);语句之后,bb1的值是怎么来的,求解答!
public class Test {
/**
  * @param args
  */
public static void main(String[] args) {
   byte bb = 126,bb2 = 5,bb1;
  bb1 = (byte)(bb+bb2);
  System.out.println(bb1);//bb1的输出值是-125,不懂为什么,求大神解答下,谢谢!
}
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
byte的取值范围在-128~127之间,

如011....1111是最大值,011.....1111+1,如果正好越界,将重新变成最小值
回复 使用道具 举报
本帖最后由 王广丛 于 2012-6-10 23:49 编辑

这个问题是这样的,按照二进制字节进行计算,126是二进制01111110,5的二进制是101,二进制相加得到10000011,而得到的这个值转换成十进制找好事-125,其实这个结果是由于二进制计算的溢出造成的

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
杨天皓 发表于 2012-6-10 23:36
byte的取值范围在-128~127之间,

如011....1111是最大值,011.....1111+1,如果正好越界,将重新变成最小 ...

但是-125是怎么来的呢,能讲清楚点吗?谢谢!
回复 使用道具 举报
126 + 1 = 127;//此时还未溢出
126 + 2 = -128;//此时溢出,相当于127+1,0111 1111 加上1是1000 000,这是-128.
126 + 3 = -127;//此时溢出,相当于127+2,0111 1111 加上0010是1000 001,这是-127.
126 + 4 = -126;//此时溢出,相当于127+3,0111 1111 加上0011是1000 010,这是-126.
126 + 5 = -125;//此时溢出,相当于127+4,0111 1111 加上0100是1000 011,这是-125.
回复 使用道具 举报
赵兵锋 发表于 2012-6-10 23:54
126 + 1 = 127;//此时还未溢出
126 + 2 = -128;//此时溢出,相当于127+1,0111 1111 加上1是1000 000,这是-1 ...

回答的非常详细 顶一下
回复 使用道具 举报
王广丛 发表于 2012-6-10 23:47
这个问题是这样的,按照二进制字节进行计算,126是二进制01111110,5的二进制是101,二进制相加得到1000001 ...

谢谢,已解决!
回复 使用道具 举报
谢谢大家回答,已解决!
回复 使用道具 举报
由于本人有关计算机组成原理的知识早就忘完了,所以上次回答具体细节确实记不清楚了....今天翻箱倒柜,把书找了出来,
于是就把详细计算过程附上,由于不能上传图片,所以以附件形式上传,楼主下载看一下吧

IMG_20120611_210311[1].jpg (350.46 KB, 下载次数: 25)

IMG_20120611_210311[1].jpg
回复 使用道具 举报
呵呵,懂了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马