我试图不使用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
我想念什么?
答案 0 :(得分:5)
如您所说:
(-2147483648) - (-2147483648) = 0
0 - (-2147483648) = 2147483648
从数学上讲,这是可行的。但是,int.MaxValue
是2147483647
。 2147483648
等效于int.MaxValue + 1
,后者溢出,将结果包装回-2147483648
。