我想要一个数据变量,它将是一个整数,其范围将来自 0 - 1.000.000。 例如,正常的int变量可以存储从-2,147,483,648到2,147,483,647的数字。 我希望新数据类型具有较小的范围,因此它可以具有较小的大小。
如果有办法,请告诉我?
答案 0 :(得分:2)
没有;你不能在C ++中为这样的变量指定任意范围。
您需要20位来存储1,000,000个不同的值,因此在不创建自定义数据类型的情况下,使用32位整数是最好的(即使这样,您也只能在24位保存1个字节,因为您可以分配少于8位。
对于强制执行值的范围,您可以使用自定义类执行此操作,但我认为您的目标不是验证,而是缩小尺寸。
答案 1 :(得分:2)
所以,这个问题没有真正好的答案。以下是一些想法:
如果您正在讨论这些20位值的数组,那么这个问题的答案可能会有所帮助:Bit packing of array of integers
另一方面,也许我们正在讨论一个对象,其中有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位数据的指针。那将不存在。