我正在尝试将我的代码移植到64位。
我发现C++提供了64位整数类型,但是我对此仍然感到困惑。
首先,我发现了四个不同的64位int
:
int_least64_t
int_fast64_t
int64_t
intmax_t
及其未签名的对应对象。我使用
sizeof()
测试了它们,它们是8字节,所以它们是64位。他们之间有什么不同?
least
和fast
类型的含义是什么?那intmax_t
呢?
最佳答案
在您的平台上,它们都是相同基础数据类型的名称。在其他平台上则不是。int64_t
必须精确为64位。在具有(例如)9位字节的体系结构上,它将完全不可用。int_least64_t
是最小的数据类型,至少64位。如果int64_t
可用,它将被使用。但是(例如)对于9位字节机器,这可能是72位。int_fast64_t
是具有至少64位和最佳算术性能的数据类型。它的存在主要是为了与int_fast8_t
和int_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/