据我所知,这会导致溢出错误,当我像这样编写时:
public static void Main()
{
Console.WriteLine(int.MaxValue - int.MinValue);
}
它确实给了我一个溢出错误。
然而:
public static void Main()
{
Console.WriteLine(test());
}
public static Int32 test(int minimum = int.MinValue, int maximum = int.MaxValue)
{
return maximum - minimum;
}
将输出-1。为什么会这样?它应该抛出一个错误,因为这明显是一个溢出!
int.MinValue
是负数。减去一个负值实际上是加法。 - Erik Philipsint.MaxValue - int.MinValue
或2147483647 - -2147483648
。我意识到仅仅移除其中一个修饰符会返回-1,但这是因为CLR是这样编码的,而不是因为某种自然数学规律。 - Erik Philips