在c中识别和处理整数溢出的最佳方法?

问题描述 投票:0回答:1

我对C很陌生,到目前为止我还不明白如何防止整数溢出,我读了很多文章,但我仍然不是100%确定! 在这种情况下

int ft_sqrt(int nb)
{
    long int    sqrt;
    
    if (nb <= 0)
        return (0);
    if (nb == 1)
        return (1); 
    sqrt = 1;
    while (sqrt * sqrt < nb)
    {
        sqrt++;
    }
    if (sqrt * sqrt == nb)
        return (sqrt);
    else
        return (0);
}

为了防止溢出,我应该使用

?这样做的最佳做法是什么?

c function integer long-integer integer-overflow
1个回答
0
投票

因此,首先,您需要知道是否想要检测溢出或者是否可以避免它们。

为了避免它们,如果您知道

nb
可以有多长,也许您可以看看
long
long long
是否足够大。而且,如果不是,也许@Jonathan Leffler提出的使用
while (sqrt < nb / sqrt)
的解决方案是使其适合其中一种类型的方法。

现在,如果您确实想要/需要检查溢出,那么您需要检查

square_root(MAX_NUMBER_ALLOWED) < sqrt
,其中
MAX_NUMBER_ALLOWED
取决于您使用的类型。 C/C++ 已经有相应的常量,您可以在here查看它们。

© www.soinside.com 2019 - 2024. All rights reserved.