我正在尝试将代码移植到64位。
我发现C ++提供了64位整数类型,但我仍然对此感到困惑。
首先,我找到了四个不同的64位int
:
int_least64_t
int_fast64_t
int64_t
intmax_t
和他们未签名的同行。我使用sizeof()
测试它们,它们是8字节,所以它们是64位。
他们之间有什么不同? least
和fast
类型的含义是什么?那么intmax_t
呢?
答案 0 :(得分:59)
在您的平台上,它们都是相同基础数据类型的所有名称。在其他平台上,它们不是。
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
。
答案 1 :(得分:13)
int64_t
正好有64位。它可能没有为所有平台定义。
int_least64_t
是最小的类型,至少有64位。
int_fast64_t
是处理速度最快的类型,至少有64位。
在32位或64位处理器上,它们都将被定义,并且都将具有64位。在假设的73位处理器上,int64_t
将不会被定义(因为没有类型具有正好64位),而其他类型将具有73位。