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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐瑶 中级黑马   /  2014-2-22 18:53  /  928 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{
        public static void main(String[] args)
        {
        byte x=127;
        x=(byte)(x+256);
        System.out.println(x);
        }
}
结果超出了byte类型的范围,不能附值,为什么结果是负数,帮我解释下,THANK.

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
你加了强转当然能赋值了 直接截取低位就变成负的了
回复 使用道具 举报 1 0
强转是不管超不超出范围直接截取低位的,所以结果自然很奇葩喽
回复 使用道具 举报
一个字节,127是最大正数,再加1,就超过,变成了-128,最小的负数,称补码溢出,这是补码的特性,你这个结果应该127,你再好好看看
回复 使用道具 举报
它的加减是用二进制的形式表现的,byte占用的是8个二进制位,x+256结果是int型,为32个二进制位,你强转的时候,x+256 = 383,为int型结果用二进制表示为101111111
0000-0000 0000-0000 0000-0010 0111-1111  把它强转成byte只要后面八位0111-1111,结果是127

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马