用c ++制作自己的数据范围

时间:2014-02-12 15:57:19

标签: c++ int range

我想要一个数据变量,它将是一个整数,其范围将来自 0 - 1.000.000。 例如,正常的int变量可以存储从-2,147,483,648到2,147,483,647的数字。 我希望新数据类型具有较小的范围,因此它可以具有较小的大小。

如果有办法,请告诉我?

3 个答案:

答案 0 :(得分:2)

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

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

对于强制执行值的范围,您可以使用自定义类执行此操作,但我认为您的目标不是验证,而是缩小尺寸。

答案 1 :(得分:2)

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

  1. 如果您正在讨论这些20位值的数组,那么这个问题的答案可能会有所帮助:Bit packing of array of integers

  2. 另一方面,也许我们正在讨论一个对象,其中有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个字节。

答案 2 :(得分:0)

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