C++ 在32位应用程序中使用uint64_t

C++ 在32位应用程序中使用uint64_t,c++,32bit-64bit,C++,32bit 64bit,由于某些库的原因,我必须以32位编译我的应用程序,但我需要使用超过最大32位类型数的整数变量。因此,例如,如果我尝试使用uint64\t,我会在2147483647处出现溢出 我认为在32位应用程序中使用64位整数变量是可能的,那么我在这里遗漏了什么呢?我是否必须包含一些特定的标题顺序?因此,我是否必须设置一些选项?使用VS17 编辑: 我做了一些测试,在这个示例程序中,我可以重现我的溢出问题 #include <iostream> int main() { uint64_

由于某些库的原因,我必须以32位编译我的应用程序,但我需要使用超过最大32位类型数的整数变量。因此,例如,如果我尝试使用
uint64\t
,我会在
2147483647
处出现溢出

我认为在32位应用程序中使用64位整数变量是可能的,那么我在这里遗漏了什么呢?我是否必须包含一些特定的标题顺序?因此,我是否必须设置一些选项?使用VS17

编辑:

我做了一些测试,在这个示例程序中,我可以重现我的溢出问题

#include <iostream>

int main()
{
    uint64_t i = 0;

    while (true)
    {
        std::printf("%d\n",i);
        i += (uint64_t)10000;
    }
    return 0;
}
#包括
int main()
{
uint64_t i=0;
while(true)
{
标准::printf(“%d\n”,i);
i+=(uint64_t)10000;
}
返回0;
}
错误在这里:

您使用了错误的格式说明符,因此程序的行为未定义<代码>%d表示
带符号整数
。你需要使用

std::printf("%" PRIu64 "\n",i);
PRIu64
中声明


另外,您还没有包括声明
std::printf

的标题,这让您觉得您在使用
uint64\t
时在2147483647上溢出了什么?那是不对的。我想您缺少的是代码中的一些其他错误,但是如果看不到这些代码,就很难提供帮助。在使用
uint64\u t
时,张贴使您认为自己得到
int32\u t
溢出的代码。在32位程序中使用64位整数变量应该很简单?默认情况下,文本是int,因此必须使用
uint64\u t v=2147483648u
uint64\u t v=68719476735ull编辑:std::printf(“%d\n”,(uint64_t)i)
应发出警告,指出格式大小(32位)与
i
的实际参数值不匹配。如果没有问题,则打印错误,请检查所有计算:)
std::printf("%" PRIu64 "\n",i);