使用C# ,我有,我需要能够检测整数溢出,并返回一个默认的最小或取决于如果溢出是最大值,由于结果是超过最大值或低于最小值几个自定义类。 我似乎无法找到如何检测到任何地方发生溢出的“类型”的建议。
使用符号值的,以及使用无符号值的:这些类两种类型之间的分歧。
作为一个例子,这里是与Int32值交易的类别之一:
public class Stat32Tf : IStat32T<float>
{
#region fields
private int baseValue, baseAdjustment;
private float baseMultiplier;
#endregion
#region ctors
public Stat32Tf()
{
baseValue = 0;
baseAdjustment = 0;
baseMultiplier = 1f;
}
public Stat32Tf(int baseValue, int baseAdjustment = 0, float baseMultiplier = 1f)
{
this.baseValue = baseValue;
this.baseAdjustment = baseAdjustment;
this.baseMultiplier = baseMultiplier;
}
#endregion
#region properties
public int BaseValue
{
get
{
return baseValue;
}
set
{
baseValue = value;
}
}
public int BaseAdjustment
{
get
{
return baseAdjustment;
}
set
{
baseAdjustment = value;
}
}
public float BaseMultiplier
{
get
{
return BaseMultiplier;
}
set
{
baseMultiplier = value;
}
}
public int TruncValue
{
get
{
return (int)Value;
}
}
public float Value
{
get
{
return (baseValue + baseAdjustment) * baseMultiplier;
}
}
#endregion
}
正如你所看到的,阶级的思想是保持基本值,调整值,并乘数值,并在Value属性返回的总价值。 (该TruncValue属性只是,因为它表明,返回截短整个值,丢弃任何分数值)。
我们的目标是处理溢出,在Value属性的“得到”访问,如果结果超过最大int值,返回int.MaxValue如果它是最小值下,返回int.MinValue,都没有抛实际的溢出错误。 该计划使棘手对我来说,一部分是调整值和乘数可能是负值,以及(根据设计要求)。
什么是安全的方式来实现这一目标? 我一直没能找到解决这种情况的任何资源。 我猜某种运算算法的需要来确定的结果将是过高或过低。