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

时间:2013-10-18 11:39:05

标签: c++ types

我知道这个问题已被问过很多,但我从未见过适合我需要的合适答案。我正在编写一个编译器和解释器以获得有趣的c ++,为了编写它们,我需要确保我使用的类型是8位,32位,64位等...我找到了,但是我已被警告,它可能无法在所有平台上运行。我也听说有些平台不支持这些大小的整数,但它必须是可能的,因为java设法实现这一点。不幸的是,java源代码不可用。

4 个答案:

答案 0 :(得分:7)

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

int8_t x;
int16_t y;
int32_t z;

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

答案 1 :(得分:2)

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

此外,OpenJDK源代码 已公开发布,您可以从提供的链接on the project page下载或浏览它并进行研究。

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

答案 2 :(得分:2)

为什么你需要确保你使用的类型正好是32 在编译器或编译器中这当然是不必要的 翻译。 (你可能需要int_least32_t,但是 通常,你会想要在任何地方使用int,以便编译器 将在任何地方工作---虽然有些程序可能太大 在16位机器上。)

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

答案 3 :(得分:0)

自从C ++ 11发布以来,有Fixed width integer types可以为您提供至少与您想要的一样大的类型。