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 [字节],但产品是相同的.我究竟做错了什么?
您必须使用正确的说明符.在"%d"
符预期的int
,你通过了long long int
.根据c标准,这将调用未定义的行为.观察到的行为可能是可解释的,但这并不意味着它不是严格的未定义行为.
修复这样的代码
printf("%lld\n", prod);
printf("%zu\n", sizeof(long long));
Run Code Online (Sandbox Code Playgroud)
它应该按预期工作.
注意:启用编译警告,您应该很快发现这种错误.
归档时间: |
|
查看次数: |
66 次 |
最近记录: |