将Int32.Maximum +值数转换为int32

时间:2016-04-04 08:20:11

标签: c#

我想使用C#将一个大于int32最大范围的数字转换为int32。因此,如果它超过最大范围2147483647,那么它将从-2147483648再次开始。现在我这样做:

long val = 3903086636L;
long rem = val % 2147483648L;
long div = val / 2147483648L;
int result = div % 2 == 0 ? (int)rem - 1 : -2147483648 + (int)rem;

我不确定如果我这样做的话。在C#中有没有任何实用功能或快速方法?

2 个答案:

答案 0 :(得分:5)

如果您没有启用checked mode,只需投射它就可以按预期处理溢出:

int i = (int)val;

或者,正如Matthew Watson所建议的那样,使编译器设置独立:

int i = unchecked((int)val);

这不会引发异常。整数将溢出并从int.MinValue继续计数。

证明:

long val = (long)int.MaxValue + 1;
int result = (int)val;

Console.WriteLine(result == int.MinValue); // true

答案 1 :(得分:0)

为什么不简单地将其余内容添加到EmailType::

int.MinValue

循环保留您可以处理的数字也大于long tmp = myValue - int.MaxValue; while(tmp > int.MaxValue) tmp -= int.MaxValue; if (tmp > 0) tmp = int.MinValue + tmp;

如果您使用此功能并使用2 * int.MaxValue进行测试,则会得到myValue = 3 * int.MaxValue + 1