-1*int.MinValue == int.MinValue ?? 这是一个错误吗?

Jam*_*mes 47 .net c# integer-overflow

在C#中,我看到了

-1 * int.MinValue == int.MinValue
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?当我试图实现搜索树时,它真的搞砸了我.我最终使用,(int.MinValue + 1)所以我可以正确否定它.

jjn*_*guy 58

这不是一个错误.

int.MinValue * -11大于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哪个1大于Int32.MaxValue.


Pas*_*uoq 9

这不是一个错误,它是一个溢出.

二进制补码表示中,可表示数字的空间不对称.无法表示最小整数的反面.计算它溢出并再次给你相同的数字.

  • 不到一秒钟,我想你会说这不是一个错误,这是一个功能.:d (7认同)

Dar*_*rov 8

int i = -1 * int.MinValue;
Run Code Online (Sandbox Code Playgroud)

除非您禁用检查,否则甚至无法编译:

error CS0220: The operation overflows at compile time in checked mode
Run Code Online (Sandbox Code Playgroud)