Long类型常量-9223372036854775808L编译溢出错误原因及解决方法
为什么直接写-9223372036854775808会触发溢出错误?怎么正确指定这个常量?
这个问题其实是VB.NET编译器里一个容易踩的小细节坑,我来给你掰扯清楚:
为啥会溢出?
Long类型的最大值是9223372036854775807,而当你直接写-9223372036854775808时,VB.NET编译器的处理逻辑是先解析正数部分9223372036854775808——但这个数已经比Long的最大值大1了,根本存不下,所以还没来得及给它加负号,就直接触发了BC30036: Overflow错误。
正确指定这个常量的几种方法
1. 直接用框架内置常量(最推荐)
.NET框架已经为Long类型预定义了最小值常量,直接用Long.MinValue就完事,既简洁又不会出错,可读性还拉满:
Dim minLong As Long = Long.MinValue
2. 通过合法数值推导
如果一定要手动计算出这个值,可以基于Long的最大值来推导,确保每一步都在Long的取值范围内:
Dim minLong As Long = (-9223372036854775807L - 1)
这里9223372036854775807L是合法的Long最大值,取负后是-9223372036854775807,再减1就刚好得到我们要的最小值,每一步都不会触发溢出。
3. 使用十六进制表示
Long类型的最小值对应的十六进制是&H8000000000000000,因为有符号64位整数的最高位是符号位,这个十六进制值的最高位为1,正好表示负数,对应的值就是-9223372036854775808:
Dim minLong As Long = &H8000000000000000
内容的提问来源于stack exchange,提问作者Anurag Rao
相关产品推荐
相关产品推荐

