在 C++ 中创建自己的数据范围

Make your own data range in c++

本文关键字:数据 范围 自己的 创建 C++      更新时间:2023-10-16

我想要一个数据变量,它将是一个整数,其范围将从0 - 1.000.000.例如,普通 int 变量可以存储从 -2,147,483,648 到 2,147,483,647 的数字。我希望新数据类型的范围更小,这样它就可以有更小的大小。

如果有办法做到这一点,请告诉我?

没有;你不能在C++中为这样的变量指定任意范围。

您需要 20 位来存储 1,000,000 个不同的值,因此使用 32 位整数是无需创建自定义数据类型的最佳方法(即使这样,您也只能以 24 位保存 1 个字节,因为您不能分配少于 8 位)。

至于强制实施值的范围,您可以使用自定义类来执行此操作,但我认为您的目标不是验证,而是减小大小。

所以,这个问题没有真正好的答案。不过,这里有一些想法:

  1. 如果您谈论的是这 20 位值的数组,那么这个问题的答案可能会有所帮助: 整数数组的位打包

  2. 另一方面,也许我们谈论的是一个对象,它有 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 位数据的指针。那将不存在。