【问题标题】:64 bit integers and older C++ compilers64 位整数和较旧的 C++ 编译器
【发布时间】:2017-11-18 08:54:46
【问题描述】:

我想在我的 C++ 代码中使用 64 位整数。我知道我可以#include <cstdint> 然后声明uint64_t 或使用unsigned long long(或签名版本的等效项)。

但是,似乎直到 C++11 才添加对此的支持,我希望我的代码与不支持 C++11 的编译器兼容。

在 C++ 中支持 64 位整数的良好可移植方式是什么?

【问题讨论】:

  • 这可能有一个 Boost 库
  • uint64_t 是可选的,即使是 C++11,所以它也不是可移植的。
  • 您是否在寻找 uint64_tuint32_t 等内容,或者特别是 uint64_t
  • @Justin 我对 64 位整数特别感兴趣。
  • @eleanora: 不,我想如果你设法遇到long long 宽于 64 位的平台,你将需要类似于 __builtin_clzll(value) + 64 - CHAR_BIT * sizeof(unsigned long long) 的东西。

标签: c++ types portability int64 long-long


【解决方案1】:

uint64_t 是:

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

您可以在ref 中阅读。


来自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(又名March 5, 2008)。

正如大卫·阿尔瓦雷斯所说。

【讨论】:

  • g++/clang 从什么时候开始支持 long long/int64_t 的?
  • @eleanora Since GCC 4.3(又名March 5, 2008
  • @DavidÁlvarez 谢谢。看起来对 int64_t 的支持比 long long 晚了一点。
  • @eleanora 是的,因为 long long int 是为 C99 添加的,而 int64_t 是可选的 C++11 功能
  • @DavidÁlvarez Re: int64_t,看起来 gcc 4.5 为 libc 没有的平台添加了内置 ,但那是在 2010 年
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多