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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

下面是例子:
byte a=(byte)130;
由于byte的取值范围是(-127~127); 很明显130超出了取值范围。 输出的a值是-126,那么是怎么来的呢?以下是取值过程。
130的二进制是
原码/补码:00000000 00000000 00000000 10000010 因为是正的 所以原码和补码一样(计算机里的数据都是以补码的形式进行计算和存储的)
那byte截取原码 1  0000010 很明显最高位为1 那值是应该是个负数
               反码 1  1111101
               补码 1  1111110(反码+1)
那转换成十进制即为-126
那么同理 -130呢?
先转成2进制
原码:10000000 00000000 00000000 10000010
反码:11111111 11111111 11111111 01111101
补码:11111111 11111111 11111111 01111110
byte截取到的原码为
01111110 很明显为正  那原码和补码一致 即为126.

评分

参与人数 2黑马币 +14 收起 理由
qq471077336 + 10 很给力!
lixiaominls + 4 很给力!

查看全部评分

12 个回复

正序浏览
Jampo 中级黑马 2015-5-14 21:39:14
13#
赞一个!太牛了
回复 使用道具 举报
本帖最后由 Chans_宇 于 2015-4-25 00:39 编辑

计算机底层运算的是补码,显示的是原码,所以截取后的是补码。
强转截取后:
补码:10000010
反码:10000001
原码:11111110

我记得是这样……
回复 使用道具 举报
130超出byte表示范围,所以自动转为int,当将int转为byte时,只取最低八位,然后八位中最高位为1,所以为负,然后其余位取反末位加1,得绝对值126,所以最后结果为-126,另外byte表示范围是-128~127,楼主注意!
回复 使用道具 举报
原来如此,参考揣摩去
回复 使用道具 举报
答案是对的,但是解法错了。截取后应该是补码,最后转成原码输出
回复 使用道具 举报
小帅哥挺爱学的么
回复 使用道具 举报

顶起。。。顶起。。。顶起。。。借鉴借鉴
回复 使用道具 举报
好牛好牛,好牛肉,来一块!
回复 使用道具 举报
大神上课好认真啊~
回复 使用道具 举报
亚麻跌~~~~亚麻得
回复 使用道具 举报
懂了...........................
回复 使用道具 举报
顶起。。。顶起。。。顶起。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马