如何防止添加整数溢出?

时间:2017-04-06 22:03:56

标签: c++ memory integer-overflow

我想将x添加到y(其中y是类A的属性)

void A::f1(char x)
{
  y += x;
}

但是,存在溢出的风险。我认为(我还没有对它们进行测试)以下两个函数应该可以防止任何溢出,但它们看起来非常复杂(并且对于f3的关注不是很快。)

void A::f2(char x)
{
    if (x > 0)
    {
        if (CHAR_MAX - x < y)
        {
            y = CHAR_MAX;
        } else if (CHAR_MIN + x > y)
        {
            y = CHAR_MIN;
        } else
        {
            y += x;
        }
    } else
    {
        if (CHAR_MAX + x < y)
        {
            y = CHAR_MAX;
        } else if (CHAR_MIN - x > y)
        {
            y = CHAR_MIN;
        } else
        {
            y += x;
        }
    }
}

void A::f3(char x)
{
    if (x < 0)
    {
        for (int i = 0 ; i < x;i++)
        {
            if (y == CHAR_MIN)
            {
                break;
            }
            y--;
        }    
    } else
    {
        for (int i = 0 ; i < x;i++)
        {
            if (y == CHAR_MAX)
            {
                break;
            }
            y++;
        }
    }
}

有更好的解决方案吗?

0 个答案:

没有答案