int_least64_t vs int_fast64_t vs int64_t

时间:2012-02-16 20:15:42

标签: 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呢?

2 个答案:

答案 0 :(得分:59)

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

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

答案 1 :(得分:13)

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

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

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

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