【问题标题】:when would you use uint_least16_t你什么时候使用 uint_least16_t
【发布时间】:2010-09-19 22:51:35
【问题描述】:

我正在查看 stdint.h 并且鉴于它具有 uint16_t 和 uint_fast16_t,那么 uint_least16_t 有什么用处?您可能希望其他两个中的一个无法做到这一点?

【问题讨论】:

    标签: c


    【解决方案1】:

    假设你正在使用以下编译器:

    • unsigned char 是 8 位
    • unsigned short 是 32 位
    • unsigned int 是 64 位

    unsigned int 是“最快的”。在那个平台上:

    • uint16_t可用
    • uint_least16_t 将是一个 32 位值
    • uint_fast16_t 将是一个 64 位值

    有点神秘,但这就是它的用途。

    它们的用处是另一回事 - 我总是看到确切的尺寸变体。这就是人们想要的。我见过的“最少”和“快速”版本几乎从未使用过(可能只是在示例代码中——我真的不确定)。

    【讨论】:

    • 从这个答案是否可以推断出旨在编写最大限度地可移植代码的编码人员应该从不使用uint16_t并且应该始终使用uint_least16_t或uint_fast16_t?
    【解决方案2】:

    啊,Patrick 发布的链接包括此“typedef 名称 uint_leastN_t 指定宽度至少为 N 的无符号整数类型,因此没有更小尺寸的无符号整数类型至少具有指定的宽度。”

    所以我目前的理解是:

    uint_least16_t 能够容纳 uint16 的最小的东西

    uint_fast16_t 最快的东西,能够容纳一个 uint16

    uint16_t 正好是一个 uint16,不幸的是可能并非在所有平台上都可用,在任何可用的平台上 uint_least16_t 都会引用它。因此,如果保证它存在于所有平台上,我们根本不需要 uint_least16_t。

    【讨论】:

    • 是的——但不保证 uint16_t 存在;想想 Cray(他们只有 64 位整数 - int 和 long)。
    • 是的...这就是我所说的“不幸的是,可能并非在所有平台上都可用”
    【解决方案3】:

    它是 c 标准的一部分。它不需要一个好的用例。 :P

    查看this 页面并查找标题为“最小宽度整数类型”的部分。

    【讨论】:

    • 它有一个很好的用例:例如从 0 到 32000 的 for 循环;计数器变量应该是什么类型? 16位?但在没有原生 16 位类型的 32 位平台上,这可能非常慢。 32位?但这在 16 或 8 位平台上会非常慢。由于只要至少有 16 位,确切的位宽就无关紧要,因此 uint_fast16_t 是这里的理想类型。但是,当您存储具有 1 个 Mio 此类值的数组时,uint_least16_t 可能会更好,因为它可能比 uint_fast16_t 小得多(为您节省数兆字节的内存)。
    猜你喜欢
    • 2012-04-23
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2010-09-23
    • 2012-04-04
    相关资源
    最近更新 更多