当乘以大的正数时,为什么结果为负?

时间:2017-01-11 13:34:04

标签: c linux

以下是我的代码和输出的片段。当大的正数乘以时,建议负面结果背后的原因?

int printM(int v)
{
     int g=v+5;
     g=g*3344564*452346;
     printf("The value of g is %d\n",g);
     return g;
}
int main()
{
    int f=0;
    int a=45;
    a=a+334;
    a=a+534534;
    a=a+939;
    a=a+45345654645;
    f=printM(a);
    return 0;
}

输出:

pravesh@pravesh-Aspire-4552:~/Desktop/c_d$ gcc -g linked_list.c 
pravesh@pravesh-Aspire-4552:~/Desktop/c_d$ ./a.out 
The value of g is -377042000

`

1 个答案:

答案 0 :(得分:1)

当溢出int时,您最终得到的是未定义的行为INT_MAX被定义为int在您的平台上可以代表的最大值。

请注意,溢出unsigned的定义很明确:它以模UINT_MAX + 1换行。

(对于它的价值,在您的案例中发生的可能的事情是int正在以与它完全相同的方式包围如果内存被解释为unsigned)。