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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏日蓝雪 中级黑马   /  2014-6-5 11:00  /  1538 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏日蓝雪 于 2014-6-6 10:34 编辑

运行结果竟然是-128,不明白,请大虾指点。
public class Practise {
        public static void main(String[] args)
        {
                byte b = 127;
                b +=1;
                System.out.println(b);
         }
}
超出范围,结果错误没问题,但-128是怎么得到的呢?求指导。


9 个回复

倒序浏览
因为10000000所代表的数就是-128,如果要编写计算器小程序,这是首要考虑的问题
回复 使用道具 举报
b +=1;
这句话意思是: b = b+1;
因为b=127
所以b + 1 = 128

b为byte类型 1为int类型 两个相加为int类型

int占4个字节 128在内存中表示为
0000 0000 - 0000 0000 -0000 0000 -1000 0000

b = 128,即 将128转换为byte
byte占一个字节 只截取int中四个字节中后面一个字节
即 1000 0000

这八位中 首位代表符号位 为1,则数字为负

求它的绝对值,即求补码 规则:出符号位不变,其余取反并加1

1000 0000 --> 1111 1111 ---->1 0000 0000(128)

符号位 (-) +绝对值(128) = -128

点评

看了很多次这个问题,这次总算看懂了,谢谢  发表于 2014-6-5 15:21

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报 3 0
学习学习:lol:lol
回复 使用道具 举报
又长知识了
回复 使用道具 举报
学习了,赞
回复 使用道具 举报
版主太牛了,顶!!!
回复 使用道具 举报
李小然 发表于 2014-6-5 11:29
b +=1;
这句话意思是: b = b+1;
因为b=127

清楚简练,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马