C 正整数的乘法结果为0(uu int64)

C 正整数的乘法结果为0(uu int64),c,C,我试图将四个整数相乘成一个\uu int64。它应该具有的值是4096*1024*64*64=17179869184。这个数字太大,无法存储在int中,这就是我使用\uu int64的原因。 然而,我得到的输出是0 我已经尝试将每一个整数转换为\uu int64,这不会改变输出为0。 另外,如果我使用调试器进行检查,test的值实际上是0,因此输出它没有问题 #include <stdio.h> #include <stdlib.h> int main() {

我试图将四个整数相乘成一个
\uu int64
。它应该具有的值是
4096*1024*64*64=17179869184
。这个数字太大,无法存储在
int
中,这就是我使用
\uu int64
的原因。 然而,我得到的输出是
0

我已经尝试将每一个整数转换为
\uu int64
,这不会改变输出为
0
。 另外,如果我使用调试器进行检查,
test
的值实际上是
0
,因此输出它没有问题

#include <stdio.h>
#include <stdlib.h>

int main() {
    __int64 test = (__int64)4096 * (__int64)1024 * (__int64)64 * (__int64)64;
    printf("%d", test);
    getchar();
}
预期产出:

17179869184

计算可能还可以,请尝试将输出格式更改为长格式,以便:

printf("%lld", test);
编辑:也应转换类型,因此:

printf("%lld", (long long)test);

您的
printf
格式说明符错误:
%d
代表
int
,而参数是
\uu int64

它应该是
长的
,然后,
%lld
,而
test
应该转换为
long
。我在问题中提到,我已经使用VS2015调试器检查过test的值实际上是0。使用
%ld
打印不会更改输出。此外,使用
test
执行的计算会导致错误的结果,因此它的值确实是错误的。@NielsSlotboom否,它不是零,它是0x400000000。看见您只需使用正确的类型说明符,并确保传递的类型是正确的。我意识到了一个错误。在我的项目中(不是上面的示例代码),我没有将值强制转换为
\uu int64
。这就是为什么使用VS2015调试器检查时会显示值为
0
,因为它实际上计算错误。在示例代码中,我确实强制转换了值,因此它可以正确计算。如果您可以将答案编辑为
%lld
而不是
%ld
,则我将接受它。
警告:格式“%d”要求参数类型为“int”,但参数2的类型为“long long int”[-Wformat=]
i686-w64-mingw32-gcc
建议
%I64d
我在问题中提到,我已经使用VS2015调试器检查了
test
的值实际上是0。使用
%ld
打印不会更改输出。
printf("%lld", (long long)test);