黑马程序员技术交流社区

标题: byte赋值问题? [打印本页]

作者: 汐枫wait    时间: 2015-12-6 22:39
标题: byte赋值问题?
byte 的取值范围是 -128~127
byte b = 127;
b += 1;
结果为-128,这是为什么呢?
作者: 雨来    时间: 2015-12-6 23:16
因为超出了 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
作者: 小曼_r9qDE    时间: 2015-12-6 23:28
上面回答的很好
作者: 雨来    时间: 2015-12-7 00:31
博客看一下:  虽然解释的不清楚但可以推出来:http://www.cnblogs.com/castworld/p/5024851.html
作者: 洋葱头头    时间: 2015-12-7 19:25
雨来 发表于 2015-12-7 00:31
博客看一下:  虽然解释的不清楚但可以推出来:http://www.cnblogs.com/castworld/p/5024851.html ...

非常棒!
作者: Weidan    时间: 2015-12-7 19:35
有一句话是这样说的:数据类型超出所能表示的范围的话,丢失精度情况下就从头开始进行计算了。
显然128是-128 那129就是-127 以此类推
作者: 毕秋    时间: 2015-12-7 21:09
这是内存溢出
作者: 汐枫wait    时间: 2015-12-7 22:01
雨来 发表于 2015-12-6 23:16
因为超出了 byte的取值范围,一般我们直接是看不出来这个结果的,要通过计算,,首先在明白  在计算机 数值 ...

回答的好全面,我之前研究了很久都不知道原因。谢谢了
作者: 耿帅东    时间: 2015-12-7 22:12
2楼兄弟的回答太全面,没的补充了赞一个
作者: lvhongli    时间: 2015-12-7 22:16
顶。。。。。。。。。。。。。。。
作者: hyl    时间: 2015-12-7 22:19
byte 的范围是-128到127
b=127;
  b+=1;
实际运行时是b=(byte)(1+127);
128超出了byte的取值范围,





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2