int_least64_t vs int_fast64_t vs int64_t

问题描述 投票:30回答:2

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

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

首先,我发现了四种不同的64位ints:

int_least64_t
int_fast64_t
int64_t
intmax_t

和他们未签名的同行。我使用sizeof()测试它们,它们是8字节,所以它们是64位。

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

c++ int 64bit
2个回答
61
投票

在您的平台上,它们都是相同基础数据类型的所有名称。在其他平台上,它们不是。

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


13
投票

int64_t正好有64位。可能没有为所有平台定义它。

int_least64_t是至少64位的最小类型。

int_fast64_t是处理速度最快的类型,至少有64位。

在32位或64位处理器上,它们都将被定义,并且都将具有64位。在一个假设的73位处理器上,不会定义int64_t(因为没有正好64位的类型),其他的将有73位。

© www.soinside.com 2019 - 2024. All rights reserved.