使用精确大小的整数 c++

Use integers of exact sizes c++

本文关键字:整数 c++      更新时间:2023-10-16

我知道这个问题已经被问了很多,但我从未见过适合我需求的合适答案。我正在用 c++ 编写编译器和解释器,为了编写它们,我需要确保我使用的类型是 8 位、32 位、64 位等...... 我发现了,但有人警告我,它可能不适用于所有平台。 我还听说某些平台不支持这些大小的整数,但这必须是可能的,因为 java 设法实现这一目标。 不幸的是,java源代码不可用。

<stdint.h>(在 c++ 上<cstdint>)标头包含服从特定大小的 typedef

int8_t x;
int16_t y;
int32_t z;

如果 typedef 不存在,则平台不支持它。要检查它,您有一些可用的宏,例如定义指定整数的最小值和最大值的宏INT16_MIN INT16_MAX,以便您可以自己查看它。

为什么需要确保使用的类型正好是 32位等。 这在编译器或译员。 (您可能需要int_least32_t,取决于。 但通常,您希望在任何地方都使用int,以便编译器可以在任何地方工作---尽管有些程序可能太大在 16 位机器上。

至于便携性:如果你这样做是为了好玩,唯一的您需要担心的平台是PC。 但即使你想要要扩展到常见的 Unix 平台,您会发现这些类型像那里也有int32_t。 关于唯一你找不到它们的地方是一些异国情调的大型机和一些嵌入式系统。 (Java不会支持这两个,要么。

确切的大小类型由 C99 标准在头文件中定义stdint.h(请看这里)。你只需要一个兼容C99的编译器,比如现代的GCC和Clang。在C++中,请改用cstdint

此外,OpenJDK源代码公开发布的,您可以从项目页面上提供的链接下载或浏览并研究它。

编辑:有少数平台(异国情调,嵌入式或非常非常旧)不声明或支持这些类型。在这些情况下,不可能获得确切的尺寸类型,您仍然可以针对大多数(如果不是任何)当前使用的家庭/企业处理器,而不必担心。

自从 C++11 发布以来,有一些固定宽度的整数类型,可以为您提供至少与您想要的大小一样大的类型。