我正在尝试将我的代码移植到64位.
我发现C++提供了64位整数类型,但我仍然对此感到困惑.
首先,我发现了四种不同的64位int:
int_least64_t
int_fast64_t
int64_t
intmax_t
Run Code Online (Sandbox Code Playgroud)
和他们未签名的同行.我测试了它们sizeof(),它们是8字节,所以它们是64位.
他们之间有什么不同?least和fast类型的含义是什么?怎么样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.
Mik*_*our 13
int64_t正好有64位.可能没有为所有平台定义它.
int_least64_t 是至少64位的最小类型.
int_fast64_t 是最快处理的类型,至少64位.
在32位或64位处理器上,它们都将被定义,并且都将具有64位.在假设的73位处理器上,int64_t将不会定义(因为没有类型具有正好64位),而其他处理器将具有73位.