在 32 位应用程序中使用 uint64_t
Using uint64_t in 32 bit application
由于某些库,我必须以 32 位编译我的应用程序,但我需要使用超过 32 位类型最大数量的整数变量。因此,例如,如果我尝试使用 uint64_t
,我会在 2147483647
.
处溢出
我认为可以在 32 位应用程序中使用 64 位整数变量,那么我在这里错过了什么?我是否必须包含一些特定的 header 或者我是否必须因此设置一些选项?使用 VS17.
编辑:
我做了一些测试,在这个示例程序中,我可以重现我的溢出问题。
#include <iostream>
int main()
{
uint64_t i = 0;
while (true)
{
std::printf("%d\n",i);
i += (uint64_t)10000;
}
return 0;
}
错误在这里:
std::printf("%d\n",i);
^^
您使用了错误的格式说明符,因此程序的行为未定义。 %d
用于 signed int
。你需要使用
std::printf("%" PRIu64 "\n",i);
PRIu64
在 <cinttypes>
中声明。
P.S。您还没有包含声明 std::printf
.
的 header
由于某些库,我必须以 32 位编译我的应用程序,但我需要使用超过 32 位类型最大数量的整数变量。因此,例如,如果我尝试使用 uint64_t
,我会在 2147483647
.
我认为可以在 32 位应用程序中使用 64 位整数变量,那么我在这里错过了什么?我是否必须包含一些特定的 header 或者我是否必须因此设置一些选项?使用 VS17.
编辑:
我做了一些测试,在这个示例程序中,我可以重现我的溢出问题。
#include <iostream>
int main()
{
uint64_t i = 0;
while (true)
{
std::printf("%d\n",i);
i += (uint64_t)10000;
}
return 0;
}
错误在这里:
std::printf("%d\n",i); ^^
您使用了错误的格式说明符,因此程序的行为未定义。 %d
用于 signed int
。你需要使用
std::printf("%" PRIu64 "\n",i);
PRIu64
在 <cinttypes>
中声明。
P.S。您还没有包含声明 std::printf
.