我正在尝试将我的代码移植到64位。
我发现C ++提供了64位整数类型,但我仍然对此感到困惑。
首先,我发现了四种不同的64位int
s:
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
。
int64_t
正好有64位。可能没有为所有平台定义它。
int_least64_t
是至少64位的最小类型。
int_fast64_t
是处理速度最快的类型,至少有64位。
在32位或64位处理器上,它们都将被定义,并且都将具有64位。在一个假设的73位处理器上,不会定义int64_t
(因为没有正好64位的类型),其他的将有73位。