溢出号码检测

Overflow number detection

情况:

我有一个系统可以读取连续的数字流(仅限整数)。

问题:

如何区分流中溢出的负数和非溢出的负数?有没有办法找到并丢弃溢出的数字?我在 C# 中开发,无法控制流源。所以我无法更改代码或添加任何检查。

您可以编写防御代码来防止溢出。

所有内置数值类型都具有 MinValueMaxValue 属性

if (number >= Int32.MinValue && number <= Int32.MaxValue)
{
     // logic
}

在一般情况下无法实现您想要的效果。关于 int (或任何其他内置值类型)的生成方式,没有任何信息。正则运算或溢出得到的值的二进制模式没有区别。

您的选择:

  • 有些情况可以通过范围检查来检测 - 如果正常值相对较小,一些较大的值可能是错误的
  • 构造 值流时捕获更多信息 - 将 "overflow" 标志作为对值
  • 对值使用更宽的类型(longBigInteger

请注意,溢出也会产生小的 number/positive 数字,因此除非您了解有关如何执行计算的更多信息,否则无法过滤所有无效值。