You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:23:06