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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

byte b = (byte)130;   //结果为-126,结果是-126真心的不知道是怎么得到的,有木有大神给解答一下,最好详细点。谢谢

56 个回复

倒序浏览
数据130默认是int类型的十进制数据
第一步十进制的130转换成二进制数据
1 0 0 0 0 0 1 0
第二步130是int类型是占4个字节的,所以在内存的表现形式是
00000000  00000000  00000000  10000010
做了截取后的结果为
10000010
通过观察最高位符号位是1,这是一个负数,因为在计算机中所有的数据都是以补码的形式出现的所以要算它的补码
原码:1 0000010    原码变反码,最高位符号位不变,其他数值位1变0,0变1得反码
反码:1 1111101    反码变补码就是反码加1得
补码;1 1111110
最终的看到的结果就是
1     1111110最高为是符号位不运算,数值为转化为十进制是64+32+16+8+4+2=126符号位负
所以为-126

评分

参与人数 1黑马币 +10 收起 理由
南柯一梦境 + 10 很给力!

查看全部评分

回复 使用道具 举报 6 0
简单的说,就是int有4个字节,byte有一个字节,在进行强制类型转换时把前面的三个自己去掉了,则二进制的符号位成了1,所以返回的是一个负数,根据剩下的二进制进行转换,数值位运算后126,所以130在强转为byte后的值是-126
回复 使用道具 举报 2 0
130的二进制是10000010,而byte最小-128为1000 0001,126为01111110加负数就是取反加1就是10000010,130默认为int型占四字节转化为byte后去一字节,二进制相同所以为-126.
回复 使用道具 举报
楼上讲的好详细
回复 使用道具 举报
byte 类型的有效位是-128~127,超出范围就会舍弃,这样用2进制把前面去掉,第一个是符号位,所以,就是-126
回复 使用道具 举报
byte 类型的有效位是-128~127,溢出了
回复 使用道具 举报
对的,超出范围就会被舍弃,根据第一个符号位,程序会自动得出是-126
回复 使用道具 举报
byte最大值只能存到127,超出范围后会按二进制换算成byte范围的值的
回复 使用道具 举报
130的二进制是10000010其为补码,由最高位是1,所以他是负数,
补码求反码减1得反码为10000001,再将反码按位取反最高位除外得原码为11111110
再通过8421码表得其为-126.
回复 使用道具 举报
哥们飘过···
回复 使用道具 举报
评论很详细啊  学习了
回复 使用道具 举报
二楼正解
回复 使用道具 举报
楼上好牛啊!!!
回复 使用道具 举报
超出byte的取值范围(-128--127),损失精度了
回复 使用道具 举报
byte 字节 超出存储的位数的 大小:0 - 255,取值范围是-128~127
回复 使用道具 举报
130超过了byte的范围,超过的部分不能用8个二进制位表示
回复 使用道具 举报
讲的好详细啊,长知识了
回复 使用道具 举报
byte范围-128~127
回复 使用道具 举报
shenkeyangguang 发表于 2015-5-11 23:00
数据130默认是int类型的十进制数据
第一步十进制的130转换成二进制数据
1 0 0 0 0 0 1 0

太详细了,非常感谢啊。之前有段时间比较忙没顾上看看,谢谢了
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马