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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class HelloWorld {      public static void main(String[] agrs) {
              byte b = 127;
              b++;
              System.out.println(b);
      }
}

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

13 个回复

倒序浏览
byte类型的范围是-128到127
回复 使用道具 举报
最后返回的byte b=(byte)128
回复 使用道具 举报
docwei 发表于 2016-3-10 00:02
最后返回的byte b=(byte)128

byte b = (byte)128的结果为什么是-128,这个结果是怎么算出来的呢?
回复 使用道具 举报
用二进制想下,二进制的整数表达形式开始标识位是0,你加以后 标识位变为1了
回复 使用道具 举报
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:37
7#
wlsperfect 发表于 2016-3-10 08:06
byte b = (byte)128的结果为什么是-128,这个结果是怎么算出来的呢?

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

你说的有道理,看来只能把最高位1,既看成数字为又看成符号位了
回复 使用道具 举报
超出byte范围,数据溢出。
回复 使用道具 举报
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的原码.  应该是这样的吧,可以看看
回复 使用道具 举报
9楼的解释不错,就是那个答案吧
回复 使用道具 举报
赞个再说
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马