qfxyx level
获赞
223
粉丝
0
关注
0
看过 TA
21
石牌村文科职业技术学院
2017
Java
IP属地:未知
暂未填写个人简介
私信
关注
2016-09-18 18:19
已编辑
石牌村文科职业技术学院 Java
0 点赞 评论 收藏
分享
2016-09-09 09:44
已编辑
石牌村文科职业技术学院 Java
Integer m =Integer.valueOf("11111111111111111111111100000000",2);这一句代码会抛出Exception in thread "main" java.lang.NumberFormatException异常,也就是说格式异常。 首先,语言是java的,我是想把一个32为ip转为整数,式子中1和0刚好有32位,按道理来说应该不会抛出异常才对,但是不知道为什么抛出了。另外,如果减少一位,也就是减少末尾一个0,变为31位,却不会抛出异常,如果使用Long.valueOf()也不会抛出异常。所以很奇怪,各位帮解析一下吗?
Afly:最简单的办法就是看源码。 先来看一下parseInt的注释: 注释中说,是通过查看第0个字符是否为'-'来判定负数,而不是看最高位是否为1。如此一来好像解释的通了。再看一下真正的转换过程(这里我调了一下源码的排版,不然惨不忍睹...): 确实如注释中所说,此时,一个32位且最高位为1的二进制数,会被错误的判定为正数。而在下面有这样一行代码: 可以看到,一个32位且最高位为1的二进制数,会被累加32次,所以其累加和是超过Integer正数的范围的。实际上不用等到第二个红框位置,在if(reult<multmin)时,就已经抛出异常了。multmin我觉得为了防止result*radix后溢出而设置的。代码的运行结果也印证了这个推测: 另外,result每次是加上负的digit,这是因为Integer的表示范围是-2的32次方到2的32次方-1.正数的值要小,那么在计算一个负数时,如果遵循先正向累加再求负的过程,是有可能溢出的。最终的结果输出可以很明显的看到是result是负数:查看图片
0 点赞 评论 收藏
分享
我同学今天被问到的,他自认为TCP这方面学到还挺深入的,可他回答这个问题时去懵逼了。大家可以讨论下。
程序员耳东:当失败时服务器并不会重传ack报文,而是直接发送RTS报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务