gpt4 book ai didi

c++ - uint32_t vs uint_fast32_t vs uint_least32_t

转载 作者:IT老高 更新时间:2023-10-28 22:24:01 30 4
gpt4 key购买 nike

我在 stdint.h 中看到了不同类型的整数定义。我将以无符号 32 位整数为例。

  1. uint32_t 显然是一个 32 位的无符号整数。这是我一直使用的那个。

  2. uint_fast32_tuint_least32_t :与 uint32_t 有什么区别,什么时候应该使用它们而不是 uint32_t ?

现在,我看到了 uintX_t,其中 X 是 24、40、48 和 56。在我的代码中,我必须使用 48 位和 56 位整数。例如,我想 uint24_t 被定义为这样的:

struct uint24_t { unsigned int the_integer : 24; };

我说的对吗?而且,您会建议我将 uint48_t 用于我的 48 位无符号整数还是应该使用普通的 uint64_t

感谢您的解释。

最佳答案

what's the difference with uint32_t

uint_fast32_t 是一种至少 32 位的无符号类型,它(以某种通用方式)是最快的此类类型。 “快速”意味着给定一个选择,实现者可能会选择架构具有算术、加载和存储指令的大小。它不是任何特定基准测试的赢家。

uint_least32_t 是至少 32 位的最小无符号类型。

uint32_t 是没有填充的正好 32 位的类型,如果存在任何此类类型的话。

Am I right?

没有。如果 uint24_t 存在,那么它是整数类型,而不是 struct。如果此实现中没有 24 位的无符号整数类型,则它不存在。

由于 unsigned long 要求至少为 32 位,uint24_t 唯一可能成为别名的标准类型是 charunsigned charunsigned shortunsigned int。或者,它可以是扩展类型(即实现提供的整数类型,不是标准中定义的任何整数类型)。

Will you suggest me to use uint48_t for my 48-bit unsigned integers?

如果它存在并且是您想要的大小,那么您不妨使用它。但是,它不会在很多实现中存在,因此它只适用于不可移植的代码。没关系,前提是您必须处理精确的 48 位整数的原因是特定于平台的。

确切的 16、32 和 64 位类型在技术上也是可选的,但如果实现具有合适的整数类型,则它们必须存在。 “合适”不仅意味着有一个精确的 N 位无符号类型没有填充位,而且对应的有符号类型没有填充位并使用 2 的补码表示。实际上,这几乎无处不在,以至于您通过使用其中任何一个都很少限制可移植性。为了获得最大的可移植性,您应该优先使用 uint_least32_tuint_fast32_t 而不是 uint32_t。哪一个取决于您是否更关心速度或大小。根据我的经验,很少有人会打扰,因为没有 32 位整数类型的平台已经很奇怪,大多数人都不关心他们的代码是否在上面运行。

关于c++ - uint32_t vs uint_fast32_t vs uint_least32_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779537/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com