c++ - int_least64_t vs int_fast64_t vs int64_t

标签 c++ int 64-bit

我正在尝试将我的代码移植到64位。

我发现C++提供了64位整数类型,但是我对此仍然感到困惑。

首先,我发现了四个不同的64位int:

int_least64_t
int_fast64_t
int64_t
intmax_t

及其未签名的对应对象。我使用sizeof()测试了它们,它们是8字节,所以它们是64位。

他们之间有什么不同? leastfast类型的含义是什么?那intmax_t呢?

最佳答案

在您的平台上,它们都是相同基础数据类型的名称。在其他平台上则不是。
int64_t必须精确为64位。在具有(例如)9位字节的体系结构上,它将完全不可用。
int_least64_t是最小的数据类型,至少64位。如果int64_t可用,它将被使用。但是(例如)对于9位字节机器,这可能是72位。
int_fast64_t是具有至少64位和最佳算术性能的数据类型。它的存在主要是为了与int_fast8_tint_fast16_t保持一致,在许多机器上,它们将是32位,而不是8或16位。再过几年,可能会有一种体系结构,其中128位数学比64位更快。认为今天没有任何东西。

如果要移植算法,则可能要使用int_fast32_t,因为它可以保存旧的32位代码可以处理的任何值,但如果更快,则可以为64位。如果要将指针转换为整数(为什么?),请使用intptr_t

关于c++ - int_least64_t vs int_fast64_t vs int64_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62908495/

相关文章:

c++ - 推导除一个模板参数外的所有参数?

C++ - 从整数数组中插入和提取字符

c - 用GCC编译的C语言泰勒级数计算程序

c++ - 我怎样才能让这个函数返回一个 sf::Texture? SFML2.0

c++ - 有.dll文件和头文件时如何制作.lib文件

c++ - 将较小数组中的值缩放到较大数组中

c# - 在构造函数中通过引用传递值,保存它,然后再修改它,如何?

C++ char 转换为 int 多字符常量

macos - 操作系统 X : why does __LP64__ lead to pure virtual functions?

linux - 迷失在组装 NASM ELF64 世界