#include <stdio.h>
int main ()
{
size_t foo = 600000000;
size_t bar = 8;
size_t foobar = foo * bar;
printf ("%lu * %lu is %lu\n",foo,bar,foobar);
}
$ gcc -o hello hello.c
$ ./hello
600000000 * 8 is 505032704
$ gcc --version
gcc (GCC) 4.4.1 20090623 (prerelease)
Mac OS X 10.7.5
原生cc(Clang)编译器产生正确的结果。但我在多个平台上使用gcc / gfortran。
答案 0 :(得分:2)
你有一个溢出问题。您的问题是您的编译器正在创建32位代码。
600000000 * 8是4800000000。 2 ^ 32是4294967296。
由于size_t在32位系统上是4个字节,假设它是无符号的,并且考虑到溢出,我们得到:
4800000000 - 4294967296,即505032704。
你应该能够找到64位编译器(它似乎是原生的cc Clang编译器),但你最好使用特定的64位类型(而不是size_t)。