-1 * int.MinValue == int.MinValue ?? 这是一个错误?
在C#中我看到了
-1 * int.MinValue == int.MinValue  这是一个错误? 当我试图实现一个search树时,它真的把我搞砸了。 我结束了使用(int.MinValue + 1)以便我可以正确否定它。 
这不是一个错误。
  int.MinValue * -1是1大于int.MaxValue可以容纳。 因此,数字回到int.MinValue 。 
这基本上是由整数溢出引起的。
  Int32.MinValue : 
这个常数的值是
-2,147,483,648
  Int32.MaxValue : 
这个常数的值是
2,147,483,647
 因此, -2,147,483,648 * -1 = 2,147,483,648比Int32.MaxValue 1 。 
这不是一个错误,这是一个溢出。
在二的补码表示中,可表示数字的空间是不对称的。 最小整数的反面不能被表示。 计算它溢出,并再次给你相同的数字。
 int i = -1 * int.MinValue; 
这甚至不编译,除非你禁用检查:
 error CS0220: The operation overflows at compile time in checked mode 
不,这不是一个错误。 这是二进制补码整数运算的本质。
 例如,让我们取一个有符号的字节值在-128和127之间。 
  127(0x7f)+1 = 128(0x80) 。 但是, 0x80实际上是-128的二进制表示。 
 因此,对于一个字节, 128(0x80) = -128(0x80) 
 所以-128(0x80) * -1 = 128(0x80) = -128(0x80) 
把一个检查区域,并看到“错误”演变成一个例外。 或者尝试VB.NET(据我所知,这是默认检查不像C#)。