首页 文章

签名和未签名的机器字类型

提问于
浏览
2

我需要一对标准整数类型,有符号和无符号,对应于机器字大小的(合理解释),并保证彼此相同的大小 .

在具有干净地址模型的平台上, intptr_tuintptr_t 符合要求,因此使用它们肯定是可能的 .

但是,有问题的代码可能需要在各种嵌入式系统上运行 . 我猜其中一些仍然使用具有286风格架构的CPU,其中最大的有效整数类型小于指针 - 请纠正我,如果不是这样 - 但如果是,那么有一个案例要做用于使用较小的整数类型 .

那个较小的整数类型可能对应于 size_tptrdiff_t - 但这些类型是否保证彼此相同?我确实需要能够在签名和未签名类型之间来回转换而不会丢失 .

还有什么我应该考虑的吗?

3 回答

  • 1

    你可以使用 size_tssize_t.

    更新:

    这肯定是 typedef 的用途,所以:

    typedef size_t uword_t;
    typedef ssize_t word_t;
    

    如果您遇到过具有C99 size_t 而不是Posix ssize_t 的系统,那么您可以:

    • 有条件地为该系统定义 word_t 一次 - 或 -

    • 或许为该系统提供您自己的 <unistd.h> . 它可以完全了解本地环境定义 ssize_t ,并清理您遇到的任何其他缺失的Posixness .

  • 2

    为什么不使用 intunsigned int

    C99 6.2.5 / 6类型

    对于每个有符号整数类型,存在相应的(但不同的)无符号整数类型(使用关键字unsigned指定),它使用相同的存储量(包括符号信息)并具有相同的对齐要求

  • 0

    我已经确定zmccord是正确的, intptr_tuintptr_t 是保证可用的类型,并且明确且毫不含糊 . 如果特定变量需要小于特定平台的变量,则可以使用所需的特定大小声明它 .

相关问题