int_least64_t vs int_fast64_t vs int64_t

use*_*528 31 c++ int 64-bit

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

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

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

int_least64_t
int_fast64_t
int64_t
intmax_t
Run Code Online (Sandbox Code Playgroud)

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

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

Ben*_*igt 63

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

int64_t必须是64位.在具有(例如)9位字节的体系结构上,它根本不可用.

int_least64_t是最小的数据类型,至少64位.如果int64_t可用,将使用它.但是(例如)使用9位字节机器,这可能是72位.

int_fast64_t是具有至少64位和最佳算术性能的数据类型.它主要是为了与int_fast8_tand 一致int_fast16_t,在许多机器上将是32位,而不是8或16.再过几年,可能会有一个架构,其中128位数学比64位快,但我不认为今天有任何存在.


如果你正在移植一个算法,你可能想要使用int_fast32_t,因为它将保留你的旧32位代码可以处理的任何值,但如果更快,它将是64位.如果你要将指针转换为整数(为什么?)然后使用intptr_t.

  • "在具有(例如)9位字节的架构上,它根本不可用." 或许值得一提的是,`intN_t`的原始POSIX定义(作为C90的扩展)允许填充,所以你可以有一个72位的`int64_t`,其中8位用于填充. (2认同)
  • 如果字节是8位,那么仍然可以(尽管不太可能)不存在64位类型,在这种情况下,将不会定义`int64_t`.并且不允许4位字节; `CHAR_BIT`必须至少为8. (2认同)

Mik*_*our 13

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

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

int_fast64_t 是最快处理的类型,至少64位.

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