-1*int.MinValue给出错误

Art*_*yan 1 .net c# int

当我写这段代码

Console.WriteLine(-1 * int.MinValue);
Run Code Online (Sandbox Code Playgroud)

要么

int a = -1 * -2147483648;
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

在检查模式下,操作在编译时溢出.

是否有编译时间检查特别是这个值?还是实时计算所有书面表达?

mjw*_*lls 9

编译器能够在编译时而不是运行时执行(乘法)计算,因此它可以执行.

由于-1 * int.MinValue(-1*-2,147,483,648,因此2,147,483,648)大于int.MaxValue(2,147,483,647),它会给你编译错误.

要证明它不是特殊的声明,请尝试:

Console.WriteLine(-2 * 1073741826);
Run Code Online (Sandbox Code Playgroud)

你会得到同样的行为.