使用精确大小的整数 c++
Use integers of exact sizes c++
我知道这个问题已经被问了很多,但我从未见过适合我需求的合适答案。我正在用 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 发布以来,有一些固定宽度的整数类型,可以为您提供至少与您想要的大小一样大的类型。
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 内联程序集printf将整数解释为地址
- 是否基于数组B整数打印数组A中的整数
- 如何在C++中将整数转换为其数字数组