在 C++ 中创建自己的数据范围
Make your own data range in c++
我想要一个数据变量,它将是一个整数,其范围将从0 - 1.000.000.例如,普通 int 变量可以存储从 -2,147,483,648 到 2,147,483,647 的数字。我希望新数据类型的范围更小,这样它就可以有更小的大小。
如果有办法做到这一点,请告诉我?
没有;你不能在C++中为这样的变量指定任意范围。
您需要 20 位来存储 1,000,000 个不同的值,因此使用 32 位整数是无需创建自定义数据类型的最佳方法(即使这样,您也只能以 24 位保存 1 个字节,因为您不能分配少于 8 位)。
至于强制实施值的范围,您可以使用自定义类来执行此操作,但我认为您的目标不是验证,而是减小大小。
所以,这个问题没有真正好的答案。不过,这里有一些想法:
-
如果您谈论的是这 20 位值的数组,那么这个问题的答案可能会有所帮助: 整数数组的位打包
-
另一方面,也许我们谈论的是一个对象,它有 3 个
int20_t
,您希望它占用的空间比正常情况下少。在这种情况下,我们可以使用位字段。struct object { int a : 20; int b : 20; int c : 20; } __attribute__((__packed__)); printf("sizeof object: %dn", sizeof(struct object));
此代码可能会打印
8
,表示它正在使用 8 个字节的空间,而不是您通常期望的 12 个字节。
数据类型只能是 8 位的倍数。这是因为,否则该数据类型将无法寻址。想象一个指向 5 位数据的指针。那将不存在。
相关文章:
- 如何计算数据类型的范围,例如int
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 即使在超出范围之后,我是否可以保留矢量数据
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- C++数据类型 s 及其范围
- C++,"由于数据类型范围有限,比较总是正确的"
- C++中最大的数据类型范围
- pImpl、范围和隐藏数据成员
- 在 c++ 中确定某个值是否在该数据类型的最大范围内
- 向量下标出的范围错误.即使向量的索引大于访问数据的索引,也会发生误差
- 在基于范围的循环范围内的双/整数使用和数据缩小
- C++奇怪的问题.数据成员超出范围
- 范围视图作为数据成员
- 当数字可能超出C++中特定数据类型的范围时如何处理异常?
- 错误:非静态数据成员的使用无效,在此范围内未声明变量
- OpenCV-浮动数据类型和强度范围在0-255范围内的RGB通道
- 运算符重载中变量的数据类型和范围应该是什么
- 如何根据过滤的数据创建笛卡尔产品范围
- 在 C++ 中创建自己的数据范围
- 提取数据范围的分隔符