为什么要减去 int.最小值本身两次导致 int.最小值?

  • 本文关键字:int 最小值 两次 c#
  • 更新时间 :
  • 英文 :


我试图在不使用如下Math.Abs的情况下获取数字的正值:

int small = -1000;
Console.WriteLine(small - small - small);
int big = int.MinValue;
Console.WriteLine(big - big - big);

第一种工作正常,我打印了 1000 个,但对于第二种情况,它-2147483648而不是正2147483648.

我怀疑这与整数溢出有关,但我认为这没有意义,因为操作的结果不应该溢出整数边界。

例如:

(-2147483648) - (-2147483648) = 0
0 - (-2147483648) = 2147483648

(-2147483648) - (-2147483648) - (-2147483648) = 2147483648

我错过了什么?

正如你所说:

(-2147483648) - (-2147483648) = 0
0 - (-2147483648) = 2147483648

从数学上讲,这是可行的。 但是,int.MaxValue2147483647.2147483648等效于int.MaxValue + 1,它溢出,将结果包装回-2147483648

最新更新