黑马程序员技术交流社区

标题: 一个byte类型强制提升问题 [打印本页]

作者: 徐瑶    时间: 2014-2-22 18:53
标题: 一个byte类型强制提升问题
class Demo
{
        public static void main(String[] args)
        {
        byte x=127;
        x=(byte)(x+256);
        System.out.println(x);
        }
}
结果超出了byte类型的范围,不能附值,为什么结果是负数,帮我解释下,THANK.
作者: ixiangfeng    时间: 2014-2-22 19:06
你加了强转当然能赋值了 直接截取低位就变成负的了
作者: 徐芾清    时间: 2014-2-22 19:47
强转是不管超不超出范围直接截取低位的,所以结果自然很奇葩喽
作者: 夏的四季    时间: 2014-2-22 19:51
一个字节,127是最大正数,再加1,就超过,变成了-128,最小的负数,称补码溢出,这是补码的特性,你这个结果应该127,你再好好看看
作者: 迦罗叶    时间: 2014-2-22 20:58
它的加减是用二进制的形式表现的,byte占用的是8个二进制位,x+256结果是int型,为32个二进制位,你强转的时候,x+256 = 383,为int型结果用二进制表示为101111111
0000-0000 0000-0000 0000-0010 0111-1111  把它强转成byte只要后面八位0111-1111,结果是127




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2