繁体   English   中英

将Int32.Maximum +值转换为int32

[英]Convert Int32.Maximum+ valued number to int32

我想掩盖一个很大的数字,该数字大于int32的最大范围-使用C#转换为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#中是否有任何实用程序功能或快速方法可以做到这一点?

如果您尚未启用检查模式 ,则只需对其进行投射即可按预期处理溢出:

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

为什么不简单地将其余部分添加到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测试, myValue = 3 * int.MaxValue + 1结果为2147483647

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM