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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈志伟 中级黑马   /  2012-4-15 22:21  /  2535 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本人初学java,有个问题,假如给出一个数据,如int i=0xFFFFFFF1; 明显的超出了int的32位范围,用eclipse运行了system.out.print(i);打印出的结果是-15,为什么会是这个结果?java是怎么处理这种数据溢出的?

4 个回复

倒序浏览
超出了就从负数开始算 不停地在正负中循环
例如;byte是-128到127 超过127就从-128开始算 一直循环
回复 使用道具 举报
本帖最后由 尹波 于 2012-4-15 22:54 编辑

(没有超出范围吧?你把0xfffffff1存进去就是-15啊,你用计算器算一下试试,我应该没算错)
    0xfffffff1这个数转成十进制好像是超出表示范围了,但还是只有32位,不过如果按照二进制存放于32位的int类型中,最高位是1,所以应该是负数,按负数的计算机存储形式得出来的结果就是-15。我没试过赋的值超过32位二进制范围会不会编译失败,如果赋值可行的话,应该就是自动忽略高于32位的数,然后根据这32位确定这个数是多少。

回复 使用道具 举报
当最大值加上1时,结果就变成表示范围中最小的值。
可以理解成循环,或者说一个箱子能装10瓶水,你非要塞11瓶,那就只能先装10瓶,倒出来,再装那剩下的一瓶~不知道这么理解对不对,反正我目前是这么理解的。实在理解不了就记着吧,毕竟有些知识只需要记忆就行了~
回复 使用道具 举报
进制转换不会出现溢出吧,同样都是32位的,把double强转成int应该差不多
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马