黑马程序员技术交流社区

标题: int 的问题 [打印本页]

作者: laoyang    时间: 2011-11-21 11:51
标题: int 的问题
本帖最后由 laoyang 于 2011-11-21 20:43 编辑

                int num=2147483647;
                System.out.println((num+2)+"");
输出了-2147483647,为什么溢出了却不抛异常?
作者: gaowei    时间: 2011-11-21 11:59
因为打印输出时是以字符串的形势输出的(num+2)+""
因此不会抛出异常了。
作者: 肖岑锋    时间: 2011-11-21 13:08
Int类型溢出是不会报异常的,
计算机的是以二进制补码的形式存储数据的,举个小例子,129的原码是00000000 00000000 00000000 10000001 ,负数最高位取1,那么-129便是10000000 00000000 00000000 10000001 ,补码计算:减1为10000000 00000000 00000000 10000000 ,再取反为11111111 11111111 11111111 01111111现在把它储存为byte型,因为Byte型只有一个字节即8位,于是只能保留低8位,前面24位丢去,得到01111111,这就对应着十进制的127。

会不会有点复杂?说简单点吧。Int是4个字节32位的数据类型。如果Int型溢出的话,它会自动截取后32位,对应的数是多少就是多少。参照上例。
作者: ZHB    时间: 2011-11-21 19:01
学习!!!!!!!!!!!!
作者: ZHB    时间: 2011-11-21 19:01
学习!!!!!!!!!!!!




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