关注
最简单的办法就是看源码。
先来看一下parseInt的注释:
注释中说,是通过查看第0个字符是否为'-'来判定负数,而不是看最高位是否为1。如此一来好像解释的通了。再看一下真正的转换过程(这里我调了一下源码的排版,不然惨不忍睹...):
确实如注释中所说,此时,一个32位且最高位为1的二进制数,会被错误的判定为正数。而在下面有这样一行代码:
可以看到,一个32位且最高位为1的二进制数,会被累加32次,所以其累加和是超过Integer正数的范围的。实际上不用等到第二个红框位置,在if(reult<multmin)时,就已经抛出异常了。multmin我觉得为了防止result*radix后溢出而设置的。代码的运行结果也印证了这个推测:
另外,result每次是加上负的digit,这是因为Integer的表示范围是-2的32次方到2的32次方-1.正数的值要小,那么在计算一个负数时,如果遵循先正向累加再求负的过程,是有可能溢出的。最终的结果输出可以很明显的看到是result是负数:
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 哪些公司开提前批了? #
25460次浏览 258人参与
# 华子oc时间线 #
1244021次浏览 6483人参与
# 风评不好的公司,你会去吗? #
59686次浏览 432人参与
# 实习如何「偷」产出? #
49692次浏览 1307人参与
# 除了主业以外,你还有哪些其他收入? #
11803次浏览 199人参与
# 不卡学历的大厂有哪些? #
28134次浏览 223人参与
# 校招阶段,学历VS技术哪个更重要? #
17174次浏览 184人参与
# 职场新人体验 #
24861次浏览 233人参与
# 腾讯音乐求职进展汇总 #
98034次浏览 570人参与
# 社恐入职新公司如何融入团队 #
11798次浏览 63人参与
# 校园里的破防时刻 #
11024次浏览 123人参与
# 哪些公司校招卡第一学历 #
67149次浏览 263人参与
# Offer比较,你最看重什么? #
191544次浏览 1301人参与
# 你投递的公司有几家约面了? #
108871次浏览 779人参与
# 你觉得技术面多长时间合理? #
100206次浏览 720人参与
# 你今年的平均薪资是多少? #
133988次浏览 686人参与
# 实习打杂,要跑路吗 #
17954次浏览 202人参与
# 正在实习的碎碎念 #
1454609次浏览 13469人参与
# 你最满意的offer薪资是哪家公司? #
33068次浏览 176人参与
# 你的秋招第一场笔试是哪家 #
147450次浏览 1484人参与