C# 为什么编译器在变量处于长数据类型范围内时会抱怨
我在班上有以下声明C# 为什么编译器在变量处于长数据类型范围内时会抱怨,c#,types,compiler-errors,long-integer,C#,Types,Compiler Errors,Long Integer,我在班上有以下声明 public class MyClass { private const long SOME_VALUE= (10 * 1024 * 1024 * 1024); // 10 GB .... } 然而,编译器正在报告以下错误 错误CS0220:在检查模式下,操作在编译时溢出 根据 据我所知,对于long类型,某些值在这个范围内。有没有想过为什么会出现这个编译时错误?计算中的每个值都是int,因此编译器将它们相乘为ints,因此溢出。最简单的解决方案是使用将
public class MyClass
{
private const long SOME_VALUE= (10 * 1024 * 1024 * 1024); // 10 GB
....
}
然而,编译器正在报告以下错误
错误CS0220:在检查模式下,操作在编译时溢出
根据
据我所知,对于long类型,某些值在这个范围内。有没有想过为什么会出现这个编译时错误?计算中的每个值都是
int
,因此编译器将它们相乘为int
s,因此溢出。最简单的解决方案是使用将其中一个或全部标记为long
,这将强制计算为long
:
private const long SOME_VALUE= 10L * 1024 * 1024 * 1024;
添加
L
后缀:
public class MyClass
{
private const long SOME_VALUE= (10L * 1024L * 1024L * 1024L); // 10 GB
....
}
如果没有L
后缀(代表long
),编译器将表达式视为int
one,并警告整数溢出