的范围长数据类型 is -9223372036854775808
to 9223372036854775807
,但以下语句会生成编译器错误“BC30036:溢出”:
Dim a As Long = -9223372036854775808L
在线尝试一下!
为什么这是一个错误?我如何指定常量-9223372036854775808
在代码中?
为什么这是一个错误?
编译器解析表达式-9223372036854775808L
作为应用于十进制整数文字的一元减运算符9223372036854775808L
。根据VB.NET规范:
十进制整数文字是一串十进制数字 (0-9)。
And:
如果整数字面量的类型的大小不足以容纳整数字面量,则会产生编译时错误。
9223372036854775808L
对于一个来说太大了Long
,所以你会得到一个溢出错误。
(减号不是整数文字的一部分。)
如何在代码中指定常量-9223372036854775808?
指定-9223372036854775808
从字面上看,使用十六进制文字:
Dim a As Long = &H8000000000000000
VB.NET 规范也提到了这一点:
十进制文字直接表示整数文字的十进制值,而八进制和十六进制文字表示整数文字的二进制值(因此,&H8000S 为 -32768,不是溢出错误)。
当然,为了清楚起见,您可能应该使用Long.MinValue
而不是字面意思:
Dim a As Long = Long.MinValue
那么 C# 呢?
正如 René Vogt 指出的那样,等效语句在 C# 中编译良好:
long a = -9223372036854775808L;
那是因为(与 VB.NET 不同)C# 支持将此作为特殊情况:
When a 小数_整数_文字值为 9223372036854775808 (2^63) 并且没有整数类型后缀 or the 整数类型后缀 L
or l
显示为紧随一元减号运算符标记的标记,结果是类型常量long
值为 -9223372036854775808 (-2^63)。在所有其他情况下,这样的小数_整数_文字属于类型ulong
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)