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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴光新 黑马帝   /  2013-8-3 16:48  /  1341 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte x = 127;
x++;
System.out.println(x);

这个输出结果是-128,求解虚拟机是怎么计算的?

为什么127自增是-128?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
一个字节是8位,127就是01111111,再加一就是10000000,就是-128,这是二进制的知识。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
额,其实我也不知道啊,应该是这样吧,计算机里底层都是要换成二进制运算的,127就是全1,加你就全变0,因为多出来的首位是1,所以是-128.

点评

肥猫,你这也猜啊  发表于 2013-8-3 22:12
回复 使用道具 举报
    呵呵     你看下我说的是不是   
byte型到128就自动提为int了,使用++符号, 得到的还是8位的,将128的16位的二进制前面的0去掉了,只剩下10000 0000,这个二进制是补码,表示的数是 -128
回复 使用道具 举报
对,因为byte字节是八位,127的二进制表达式是0111 1111,127+1之后的二进制是1000 0000,x自增之后,转换成了int型,而首位为1,所以自增后的二进制前面三个字节全部补的是1,就是1111 1111 1111 1111 1111 1111 1000 0000,jvm会判断前面代表符号位,所以转换成十进制后成了-128
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马