64位整数和旧版C++编译器

8
我想在我的C++代码中使用64位整数。我了解到可以通过#include <cstdint>和声明 uint64_t 或使用 unsigned long long(或相应的带符号版本)实现。
然而,这种支持似乎直到C++11才添加,并且我想让我的代码兼容没有完全支持C ++11的编译器。
有什么好的可移植方法在C++中支持64位整数?

可能有一个适用于此的Boost库。 - Justin
@Justin 我特别关注64位整数。 - Simd
你需要保证 64 位还是至少支持 64 位? - NathanOliver
我不知道。我的想法没有实现,所以我猜这没关系,抱歉。 - NathanOliver
1
@eleanora:不,我想如果你遇到一个比64位更宽的long long平台,你需要类似于“__builtin_clzll(value) + 64 - CHAR_BIT * sizeof(unsigned long long)”这样的东西。 - doynax
显示剩余4条评论
1个回答

7

uint64_t是:

可选的:如果不存在具有这些特征的类型,则不定义这些typedef。

您可以在参考文献中阅读到。


Should I use long long or int64_t for portable code?中了解到:

long longunsigned long long是标准C和标准C++类型,每种类型至少有64位。 我所知道的所有编译器都提供这些类型,除非在-pedantic模式下,但在这种情况下,int64_tuint64_t也将无法在C++ 2011之前的编译器中使用。


g++/clang从哪个日期开始支持long long/int64_t

GCC 4.3(即2008年3月5日)。

如David Álvarez所提到的。


g++/clang 从哪个日期开始支持 long long/int64_t? - Simd
1
@eleanora 自GCC 4.3版本(也称2008年3月5日)起。 - David Álvarez
@DavidÁlvarez 谢谢。看起来 int64_t 的支持比 long long 晚了一些。 - Simd
@eleanora 是的,因为long long int是在C99中添加的,而int64_t是C++11的可选特性。 - David Álvarez
@DavidÁlvarez 关于 int64_t,看起来 gcc 4.5 添加了一个内置的 <stdint.h>,用于那些 libc 没有的平台,但那是在 2010 年。 - Simd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接