整数溢出检测C#for Add

时间:2015-08-15 05:08:31

标签: c#

很容易让C#在整数溢出上抛出异常。但是,这不是我想要的。我想检测溢出,所以我可以继续高位计算。我正在构建一种大型的int实现。

我可以捕获溢出异常,但这对于性能并不好。更不用说它在概念上是不正确的。

知道如何检查溢出而没有例外吗?

1 个答案:

答案 0 :(得分:1)

如果你想用carry实现加法和减法,我真的建议使用uint而不是int!在进行计算之前,将两个值都转换为ulong

//Adds a and b
uint[] a = ... , b = ... ;//input
ulong carry=0
for(int i=0;i<length;i++)
{
    carry += (ulong)a[i] + (ulong)b[i];
    uint result = (uint)carry;
    carry >>= 32;//divide by 2^32
    //TODO: store result
}
//TODO: process remaining carry

当我第一次实现类似的东西时,我遇到了符号扩展的问题,因此到处都是无符号类型。