黑马程序员技术交流社区

标题: 整型数据溢出的问题 [打印本页]

作者: 陈志伟    时间: 2012-4-15 22:21
标题: 整型数据溢出的问题
本人初学java,有个问题,假如给出一个数据,如int i=0xFFFFFFF1; 明显的超出了int的32位范围,用eclipse运行了system.out.print(i);打印出的结果是-15,为什么会是这个结果?java是怎么处理这种数据溢出的?
作者: chenwei    时间: 2012-4-15 22:43
超出了就从负数开始算 不停地在正负中循环
例如;byte是-128到127 超过127就从-128开始算 一直循环
作者: 尹博    时间: 2012-4-15 22:45
本帖最后由 尹波 于 2012-4-15 22:54 编辑

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


作者: 张卯    时间: 2012-4-15 22:47
当最大值加上1时,结果就变成表示范围中最小的值。
可以理解成循环,或者说一个箱子能装10瓶水,你非要塞11瓶,那就只能先装10瓶,倒出来,再装那剩下的一瓶~不知道这么理解对不对,反正我目前是这么理解的。实在理解不了就记着吧,毕竟有些知识只需要记忆就行了~
作者: 吴玉辉    时间: 2012-4-15 22:53
进制转换不会出现溢出吧,同样都是32位的,把double强转成int应该差不多




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