我知道这个问题被问了很多,但我从未见过适合我需要的合适答案。我正在用 C++ 编写一个有趣的编译器和解释器,为了编写它们,我需要确保我使用的类型是 8 位、32 位、64 位等......我找到了,但是我已被警告它可能不适用于所有平台。我还听说有些平台不支持这些大小的整数,但它必须是可能的,因为 java 设法实现了这一点。不幸的是,java源代码不可用。
问问题
506 次
4 回答
7
( on c++) 标头包含遵循特定大小的 s <stdint.h>
:<cstdint>
typedef
int8_t x;
int16_t y;
int32_t z;
如果 typedef 不存在,则平台不支持它。要检查它,您有一些可用的宏,例如INT16_MIN
INT16_MAX
定义指定整数的最小值和最大值,以便您自己查看。
于 2013-10-18T11:42:58.017 回答
2
为什么需要确保您使用的类型恰好是 32 位等。这在编译器或解释器中肯定是不必要的。(您可能需要int_least32_t
,这取决于。但通常,您会希望在int
任何地方使用,以便编译器可以在任何地方工作——尽管有些程序在 16 位机器上可能对它来说太大了。)
至于便携性:如果您这样做是为了好玩,您唯一需要担心的平台就是 PC。但即使您想扩展到常见的 Unix 平台,您也会发现类似的类型int32_t
在那里也可用。您找不到它们的唯一地方是一些奇异的大型机和一些嵌入式系统。(Java 也不支持这两者。)
于 2013-10-18T11:45:39.153 回答
0
由于 C++11 已经发布,有固定宽度的整数类型可以为您提供至少与您想要的一样大的类型。
于 2013-10-18T11:59:17.770 回答