【问题标题】:Naming convention used in `<cstdint>``<cstdint>` 中使用的命名约定
【发布时间】:2012-03-18 12:26:55
【问题描述】:

&lt;cstdint&gt; (&lt;stdint.h&gt;) 标头定义了几种整数类型,它们的名称遵循以下模式:intN_t,其中N 是位数,而不是字节数。

鉴于一个字节没有严格定义为 8 位长度,为什么这些类型不定义为,例如,int1_t 而不是int8_t?因为它考虑了具有异常长度字节的机器,这不是更合适吗?

【问题讨论】:

  • 精确宽度类型的全部意义在于它们依赖于架构;他们甚至要求一个表示(没有填充的二进制补码),这对于任意整数类型都是不正确的......
  • 您是否有这样的案例?

标签: c++ c


【解决方案1】:

在不完全具有这些尺寸的机器上,没有定义类型。也就是说,如果您的机器没有 8 位字节,那么 int8_t 将不可用。但是,您仍然可以使用最少的版本,例如 int_least16_t

人们怀疑的原因是,如果您想要一个精确的大小,您通常需要一个位大小,而不是真正的抽象字节大小。例如,所有 Internet 协议都处理 8 位字节,因此您希望拥有 8 位,无论这是否是本机字节大小。


This answer 在这方面也提供了很多信息。

【讨论】:

    【解决方案2】:

    int32_t 可以是 4-byte 8-bits-per-byte 类型,也可以是 2-byte 16-bits-per-byte 类型,也可以是 1-byte 32-bits-每字节类型。您可以在其中存储的值无关紧要。

    【讨论】:

      【解决方案3】:

      使用这些类型的想法是明确您可以存储到变量中的位数。正如您所指出的,不同的架构可能具有不同的字节大小,因此具有字节数并不能保证您的变量可以处理的位数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 2018-07-05
        • 2023-03-03
        相关资源
        最近更新 更多