我试图在不使用如下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.MaxValue
2147483647
.2147483648
等效于int.MaxValue + 1
,它溢出,将结果包装回-2147483648
。