【发布时间】:2019-08-29 11:00:36
【问题描述】:
由于某些库,我必须以 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;
}
【问题讨论】:
-
是什么让您认为您在 2147483647 与
uint64_t会溢出?这是不对的。我猜您缺少的是代码中的其他一些错误,但是如果没有看到该代码,就很难提供帮助。发布让您认为在使用uint64_t时出现int32_t溢出的代码。在 32 位程序中使用 64 位整数变量应该很简单。 -
我可以假设您在
uint64_t v = 2147483648;中使用了类似的文字吗?默认情况下,文字是 int,因此您必须使用uint64_t v = 2147483648u;或uint64_t v = 68719476735ull;等 -
到您的编辑:
std::printf("%d\n",(uint64_t)i);应该产生格式的大小(32 位)与实际参数不匹配的警告 -
i的值正常,打印错误 -
所以用 en.cppreference.com/w/cpp/language/implicit_conversion 武装自己并检查所有的计算 :)
标签: c++ 32bit-64bit