.net – “溢出”编译器错误-9223372036854775808L
Long data type的范围是-9223372036854775808到9223372036854775807,但以下语句生成编译器错误“BC30036:溢出”:
Dim a As Long = -9223372036854775808L Try it online! 为什么这是一个错误?如何在代码中指定常量-9223372036854775808?
为什么这是一个错误?
编译器将表达式-9223372036854775808L解析为应用于十进制整数文字9223372036854775808L的一元减号运算符.根据VB.NET specification:
和:
9223372036854775808L对于Long而言太大,因此会出现溢出错误. 如何在代码中指定常量-9223372036854775808? 要按字面指定-9223372036854775808,请使用十六进制文字: Dim a As Long = &H8000000000000000 VB.NET规范也提到了这一点:
当然,为了清楚起见,您应该只使用Long.MinValue而不是文字: Dim a As Long = Long.MinValue C#怎么样? 正如RenéVogt指出的那样,等效语句在C#中编译得很好: long a = -9223372036854775808L; 那是因为(与VB.NET不同)C# supports this as a special case:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |