sizeof(long long)给出8但是数字溢出2**32

Nim*_*z14 -1 c overflow long-integer

long long n, prod, i;
n = 13;
prod = 1;

for (i = 1 ; i <= n ; i++) {
    prod *= i;
}
printf("%d\n", prod);
printf("%d\n", sizeof(long long));
Run Code Online (Sandbox Code Playgroud)

回报

$ 1932053504
$ 8
Run Code Online (Sandbox Code Playgroud)

结果显然是溢出的.但我不明白为什么会发生这种情况long long.sizeof(int)返回4 [字节],但产品是相同的.我究竟做错了什么?

Iha*_*imi 6

您必须使用正确的说明符.在"%d"符预期的int,你通过了long long int.根据标准,这将调用未定义的行为.观察到的行为可能是可解释的,但这并不意味着它不是严格的未定义行为.

修复这样的代码

printf("%lld\n", prod);
printf("%zu\n", sizeof(long long)); 
Run Code Online (Sandbox Code Playgroud)

它应该按预期工作.

注意:启用编译警告,您应该很快发现这种错误.