如何在c中检查整数溢出32位签名的整数

  • 本文关键字:整数 溢出 32位 c
  • 更新时间 :
  • 英文 :

int reverseNumber(int x){
long k = x;
long result=0;
int negative=0;
if (k < 0)
{
    negative = 1;
    k = 0 - k;
}
while (k != 0)
{
    result = (result * 10) +( k % 10);
    k /= 10;
}
if (result >INT_MAX)
    return 0;
else
{
    if (negative == 1)
        return (0-(int)result);
    else
        return (int)result;
}
}

这是逆转32位整数并检查整数溢出条件的函数代码。代码必须返回溢出案例的代码,否则反向数字。对于输入2147483647(int_max(,我仍在获取输出 - 1126087180实际上应该为零。请任何人可以帮助您。 谢谢

这是一个版本,它不是混合不同的整数类型。所有计算均为int。这样,您就不需要关心不同整数类型的大小。

NOTE 此部分仅处理x>=0

#include <stdio.h>
#include <limits.h>
int reverseNumber(int x){
    int result=0;
    if (x < 0)
    {
        printf("This version requires x >= 0n");
        exit(1);
    }
    while (x != 0)
    {
        if (result > INT_MAX/10)  // Check for overflow before multiplying
        {
            return 0; // Will overflow
        }
        result = 10 * result;
        if (result > (INT_MAX - (x % 10)))   // Check for overflow before adding
        {
            return 0; // Will overflow
        }
        result = result + (x % 10);
        x /= 10;
    }
    return result;
}
int main(void) {
    printf("%dn", reverseNumber(INT_MAX));
    printf("%dn", reverseNumber(2147483412));
    return 0;
}

输出:

0
2143847412

最新更新