关注
最简单的办法就是看源码。
先来看一下parseInt的注释:
注释中说,是通过查看第0个字符是否为'-'来判定负数,而不是看最高位是否为1。如此一来好像解释的通了。再看一下真正的转换过程(这里我调了一下源码的排版,不然惨不忍睹...):
确实如注释中所说,此时,一个32位且最高位为1的二进制数,会被错误的判定为正数。而在下面有这样一行代码:
可以看到,一个32位且最高位为1的二进制数,会被累加32次,所以其累加和是超过Integer正数的范围的。实际上不用等到第二个红框位置,在if(reult<multmin)时,就已经抛出异常了。multmin我觉得为了防止result*radix后溢出而设置的。代码的运行结果也印证了这个推测:
另外,result每次是加上负的digit,这是因为Integer的表示范围是-2的32次方到2的32次方-1.正数的值要小,那么在计算一个负数时,如果遵循先正向累加再求负的过程,是有可能溢出的。最终的结果输出可以很明显的看到是result是负数:
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# Agent面试会问什么? #
32298次浏览 1282人参与
# 米哈游工作体验 #
29650次浏览 143人参与
# 厦门银行科技岗值不值得投 #
18658次浏览 421人参与
# 面试体验最好和最差的公司 #
23140次浏览 161人参与
# 携程笔试 #
152414次浏览 884人参与
# 我的求职进度条 #
979929次浏览 6520人参与
# 哪些公司一直卡在简历筛选 #
104016次浏览 343人参与
# 一人分享一个skill #
8427次浏览 226人参与
# 选实习,你更看重哪方面? #
76433次浏览 505人参与
# 春招至今,你收到几个面试了? #
82591次浏览 1079人参与
# 拼多多工作体验 #
55169次浏览 389人参与
# 说说你知道的学历厂 #
399910次浏览 1424人参与
# TCL求职进展汇总 #
152141次浏览 665人参与
# 给工作过的公司写一条大众点评,你会怎么写? #
11129次浏览 131人参与
# 春招已经启动啦 硬件uu开始投了吗? #
124136次浏览 771人参与
# 拿到offer之后,可以做些什么 #
103605次浏览 506人参与
# 我是XXX,请攻击我最薄弱的地方 #
72604次浏览 490人参与
# 中国电信笔试 #
39735次浏览 363人参与
# 入职第一天,你准备什么时候下班 #
117852次浏览 515人参与
# 通信/硬件的薪资开多少,才值得去? #
76327次浏览 406人参与
# 烂工作和没工作哪个更痛苦? #
18330次浏览 273人参与