uint8_t、uint_fast8_t 和 uint_least8_t 之间的区别

新手上路,请多包涵

C99 标准引入了以下数据类型。可以在 此处 找到 AVR stdint 库的文档。

  • uint8_t 表示它是一个 8 位无符号类型。
  • uint_fast8_t 表示它是最快的无符号整数,至少有 8 位。
  • uint_least8_t 表示它是一个至少有 8 位的无符号整数。

我了解 uint8_t 以及 uint_fast8_t 是什么(我不知道它是如何在寄存器级别实现的)。

1.你能解释一下“它是一个 unsigned int 至少有 8 位”是什么意思吗?

2. 与 — 相比, uint8_t uint_fast8_tuint_least8_t 帮助提高效率/代码空间?

原文由 mic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

uint_least8_t 是至少有 8 位的最小类型。 uint_fast8_t 是最快的类型,至少有 8 位。

您可以通过想象异国情调的架构来看到差异。想象一个 20 位架构。它的 unsigned int 有20位(一个寄存器),它的 unsigned char 有10位。所以 sizeof(int) == 2 ,但是使用 char 类型需要额外的指令来将寄存器减半。然后:

  • uint8_t :未定义(无 8 位类型)。
  • uint_least8_t :是 unsigned char ,最小的类型,至少是 8 位。
  • uint_fast8_t : 是 unsigned int ,因为在我想象的架构中,半寄存器变量比全寄存器变量慢。

原文由 rodrigo 发布,翻译遵循 CC BY-SA 3.0 许可协议

顾名思义, uint_least8_t 是最小的类型,至少有 8 位, uint_fast8_t 是最快的类型,至少有 8 位。 uint8_t 正好有 8 位,但不能保证在所有平台上都存在,尽管这种情况极少见。

在大多数情况下, uint_least8_t = uint_fast8_t = uint8_t = unsigned char 。我见过的唯一例外是德州仪器的 C2000 DSP,它是 32 位的,但它的最小数据宽度是 16 位。 It does not have uint8_t , you can only use uint_least8_t and uint_fast8_t , they are defined as unsigned int , which is 16-bit .

原文由 Rikka0_0 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题