黑马程序员技术交流社区

标题: 求指点byte b = 127;b++案例分析结果 [打印本页]

作者: wlsperfect    时间: 2016-3-9 21:57
标题: 求指点byte b = 127;b++案例分析结果
class HelloWorld {      public static void main(String[] agrs) {
              byte b = 127;
              b++;
              System.out.println(b);
      }
}

控制台输出结果为-128.
求指点结果为什么是-128,这个结果是怎么推算出来,要详细推算过程,不知哪位大神能解答出此案例,多谢!

作者: yehai    时间: 2016-3-9 22:20
byte类型的范围是-128到127
作者: docwei    时间: 2016-3-10 00:02
最后返回的byte b=(byte)128
作者: wlsperfect    时间: 2016-3-10 08:06
docwei 发表于 2016-3-10 00:02
最后返回的byte b=(byte)128

byte b = (byte)128的结果为什么是-128,这个结果是怎么算出来的呢?
作者: xushao    时间: 2016-3-10 12:22
用二进制想下,二进制的整数表达形式开始标识位是0,你加以后 标识位变为1了
作者: docwei    时间: 2016-3-11 23:08
wlsperfect 发表于 2016-3-10 08:06
byte b = (byte)128的结果为什么是-128,这个结果是怎么算出来的呢?

byte的取值范围是-128到127,既然127进行了+1的操作,那么要表示byte就得重新从取值范围的第一个开始,第一个就是-128,告诉你:正负128的二进制是一样的。
作者: docwei    时间: 2016-3-11 23:09
wlsperfect 发表于 2016-3-10 08:06
byte b = (byte)128的结果为什么是-128,这个结果是怎么算出来的呢?

byte的取值范围是-128到127,既然127进行了+1的操作,那么要表示byte就得重新从取值范围的第一个开始,第一个就是-128,告诉你:正负128的二进制是一样的。
作者: 赵国政    时间: 2016-3-11 23:24
各位大神 上面回复的贴 都没看懂啊!
作者: lijiy09    时间: 2016-3-12 00:52
127二进制表示为0111 1111,加1后变为1000 0000,1既是数字位,又是符号位,是-128。
作者: wlsperfect    时间: 2016-3-12 09:38
lijiy09 发表于 2016-3-12 00:52
127二进制表示为0111 1111,加1后变为1000 0000,1既是数字位,又是符号位,是-128。 ...

你说的有道理,看来只能把最高位1,既看成数字为又看成符号位了
作者: Senmonfy    时间: 2016-3-13 13:32
超出byte范围,数据溢出。
作者: zixiyang    时间: 2016-3-13 14:09
wlsperfect 发表于 2016-3-10 08:06
byte b = (byte)128的结果为什么是-128,这个结果是怎么算出来的呢?

使用二进制算啊,先把128的二进制写出来,00000000 00000000 00000000 10000000然后用byte强制转换后变成10000000 我们知道二进制的高位是个符号位,而且是是用补码进行运算的所以1  0000000 是补码 其反码是
补码-1 反码就 1  1111111,原码就是 1  0000000;;这就是byte类型的-128的原码.  应该是这样的吧,可以看看
作者: 韩文通    时间: 2016-3-13 15:15
9楼的解释不错,就是那个答案吧
作者: 小柴天雅    时间: 2017-3-4 00:49
赞个再说




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