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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© laoyang 黑马帝   /  2011-11-21 11:51  /  1599 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 laoyang 于 2011-11-21 20:43 编辑

                int num=2147483647;
                System.out.println((num+2)+"");
输出了-2147483647,为什么溢出了却不抛异常?

4 个回复

倒序浏览
因为打印输出时是以字符串的形势输出的(num+2)+""
因此不会抛出异常了。
回复 使用道具 举报
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:03
板凳
学习!!!!!!!!!!!!
回复 使用道具 举报
ZHB 黑马帝 2011-11-21 19:01:28
报纸
学习!!!!!!!!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马