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

C++ 在c+中创建自己的数据范围+;,c++,int,range,C++,Int,Range,我想要一个数据变量,它是一个整数,它的范围是 0 - 1.000.000. 例如,普通整数变量可以存储从-2147483648到2147483647的数字。 我希望新的数据类型具有较小的范围,以便它可以具有较小的大小 如果有办法,请告诉我。没有;不能在C++中指定这样的变量的任意范围。 您需要20位来存储1000000个不同的值,因此在不创建自定义数据类型的情况下,使用32位整数是最好的选择(即使这样,您也只能在24位保存1个字节,因为您不能分配少于8位) 至于强制值的范围,您可以通过自定义类来

我想要一个数据变量,它是一个整数,它的范围是 0 - 1.000.000. 例如,普通整数变量可以存储从-2147483648到2147483647的数字。 我希望新的数据类型具有较小的范围,以便它可以具有较小的大小


如果有办法,请告诉我。

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

您需要20位来存储1000000个不同的值,因此在不创建自定义数据类型的情况下,使用32位整数是最好的选择(即使这样,您也只能在24位保存1个字节,因为您不能分配少于8位)


至于强制值的范围,您可以通过自定义类来实现,但我假设您的目标不是验证,而是减小大小;不能在C++中指定这样的变量的任意范围。

您需要20位来存储1000000个不同的值,因此在不创建自定义数据类型的情况下,使用32位整数是最好的选择(即使这样,您也只能在24位保存1个字节,因为您不能分配少于8位)


至于强制值的范围,您可以使用自定义类来实现,但我假设您的目标不是验证,而是减小大小。

您只能将数据类型设置为8位的倍数。这是因为,否则该数据类型将不可寻址。想象一个指向5位数据的指针。这将不存在。

您只能将数据类型设置为8位的倍数。这是因为,否则该数据类型将不可寻址。想象一个指向5位数据的指针。这是不存在的。

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

  • 如果您谈论的是由这些20位值组成的数组,那么这个问题的答案可能会有所帮助:

  • 另一方面,也许我们讨论的是一个对象,其中包含3个
    int20\t
    s,您希望它占用的空间比正常情况下少。在这种情况下,我们可以使用位字段

    struct object {
        int a : 20;
        int b : 20;
        int c : 20;
    } __attribute__((__packed__));
    
    printf("sizeof object: %d\n", sizeof(struct object));
    
    此代码可能会打印
    8
    ,表示它使用的是8字节的空间,而不是您通常期望的12字节


  • 所以,这个问题没有真正好的答案。以下是一些想法:

  • 如果您谈论的是由这些20位值组成的数组,那么这个问题的答案可能会有所帮助:

  • 另一方面,也许我们讨论的是一个对象,其中包含3个
    int20\t
    s,您希望它占用的空间比正常情况下少。在这种情况下,我们可以使用位字段

    struct object {
        int a : 20;
        int b : 20;
        int c : 20;
    } __attribute__((__packed__));
    
    printf("sizeof object: %d\n", sizeof(struct object));
    
    此代码可能会打印
    8
    ,表示它使用的是8字节的空间,而不是您通常期望的12字节


  • 你只需要存储它们还是做一些算术运算?范围较小的整数类型比范围较小、大小较小的整数类型容易得多。您知道0到100万的值需要标准整数大小的63%,而且速度要慢得多?您只需要存储它们还是要做一些算术?范围较小的整数类型比范围较小、大小较小的整数类型要容易得多。您知道0到100万的值需要标准整数大小的63%,而且速度要慢得多吗?