C++ 在c+中创建自己的数据范围+;
我想要一个数据变量,它是一个整数,它的范围是 0 - 1.000.000. 例如,普通整数变量可以存储从-2147483648到2147483647的数字。 我希望新的数据类型具有较小的范围,以便它可以具有较小的大小C++ 在c+中创建自己的数据范围+;,c++,int,range,C++,Int,Range,我想要一个数据变量,它是一个整数,它的范围是 0 - 1.000.000. 例如,普通整数变量可以存储从-2147483648到2147483647的数字。 我希望新的数据类型具有较小的范围,以便它可以具有较小的大小 如果有办法,请告诉我。没有;不能在C++中指定这样的变量的任意范围。 您需要20位来存储1000000个不同的值,因此在不创建自定义数据类型的情况下,使用32位整数是最好的选择(即使这样,您也只能在24位保存1个字节,因为您不能分配少于8位) 至于强制值的范围,您可以通过自定义类来
如果有办法,请告诉我。没有;不能在C++中指定这样的变量的任意范围。 您需要20位来存储1000000个不同的值,因此在不创建自定义数据类型的情况下,使用32位整数是最好的选择(即使这样,您也只能在24位保存1个字节,因为您不能分配少于8位)
至于强制值的范围,您可以通过自定义类来实现,但我假设您的目标不是验证,而是减小大小;不能在C++中指定这样的变量的任意范围。 您需要20位来存储1000000个不同的值,因此在不创建自定义数据类型的情况下,使用32位整数是最好的选择(即使这样,您也只能在24位保存1个字节,因为您不能分配少于8位)
至于强制值的范围,您可以使用自定义类来实现,但我假设您的目标不是验证,而是减小大小。您只能将数据类型设置为8位的倍数。这是因为,否则该数据类型将不可寻址。想象一个指向5位数据的指针。这将不存在。您只能将数据类型设置为8位的倍数。这是因为,否则该数据类型将不可寻址。想象一个指向5位数据的指针。这是不存在的。所以,这个问题没有真正好的答案。以下是一些想法:
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字节所以,这个问题没有真正好的答案。以下是一些想法:
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%,而且速度要慢得多吗?