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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汐枫wait 中级黑马   /  2015-12-6 22:39  /  1397 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte 的取值范围是 -128~127
byte b = 127;
b += 1;
结果为-128,这是为什么呢?

10 个回复

倒序浏览
因为超出了 byte的取值范围,一般我们直接是看不出来这个结果的,要通过计算,,首先在明白  在计算机 数值都是以补码的 形式参与运算  的:
还有  通过  运算  b+=1 虽然  java底层为我们加了  强类型转换  也就是  byte=(byte)(127+1)  其实  是把  int 类型转成了  byte     我们看一下  128  的  原码  因为正数的原码 、补码、反码  都是一样的    128  的补码  是  1000=0000  前面3个8位舍弃   那么 1000-0000  这个补码的  十进制是多少呢?   因为  0的补码是 0000-0000  所以这个 码  中的  1是符位 也是数值  位    高位 1 是负数  因为后7位  全是0  那么  我们从低位  推:  从1位到 8位  如果  位是 1则分别是  1、2、4、8、16、32、64、128     因为后7位全是 0 只有8位是 1  所以  (byte)128=-128

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报 1 0
上面回答的很好
回复 使用道具 举报
博客看一下:  虽然解释的不清楚但可以推出来:http://www.cnblogs.com/castworld/p/5024851.html
回复 使用道具 举报
雨来 发表于 2015-12-7 00:31
博客看一下:  虽然解释的不清楚但可以推出来:http://www.cnblogs.com/castworld/p/5024851.html ...

非常棒!
回复 使用道具 举报
有一句话是这样说的:数据类型超出所能表示的范围的话,丢失精度情况下就从头开始进行计算了。
显然128是-128 那129就是-127 以此类推
回复 使用道具 举报
毕秋 初级黑马 2015-12-7 21:09:08
7#
这是内存溢出
回复 使用道具 举报
雨来 发表于 2015-12-6 23:16
因为超出了 byte的取值范围,一般我们直接是看不出来这个结果的,要通过计算,,首先在明白  在计算机 数值 ...

回答的好全面,我之前研究了很久都不知道原因。谢谢了
回复 使用道具 举报
2楼兄弟的回答太全面,没的补充了赞一个
回复 使用道具 举报
顶。。。。。。。。。。。。。。。
回复 使用道具 举报
hyl 中级黑马 2015-12-7 22:19:23
11#
byte 的范围是-128到127
b=127;
  b+=1;
实际运行时是b=(byte)(1+127);
128超出了byte的取值范围,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马