我想定义我自己的数据类型,它可以保存六个可能值中的一个,以便了解有关 c++ 中内存管理的更多信息。在数字中,我希望能够保存 0 到 5。二进制,三位 (101=5) 就足够了,尽管有些(6 和 7)不会被使用。数据类型也应该消耗尽可能少的内存。
我不确定如何完成此操作。首先,我尝试了一个为所有字段定义了值的枚举。据我所知,那里的值是十六进制的,所以一个“hexbit”应该允许我存储 0 到 15。但是将它与 char(带有 sizeof)进行比较,它表示它的大小是 char 的 4 倍,并且如果我没记错的话,一个 char 的值是 0 到 255。
#include <iostream>
enum Foo
{
a = 0x0,
b = 0x1,
c = 0x2,
d = 0x3,
e = 0x4,
f = 0x5,
};
int main()
{
Foo myfoo = a;
char mychar = 'a';
std::cout << sizeof(myfoo); // prints 4
std::cout << sizeof(mychar); // prints 1
return 1;
}
我显然误解了一些东西,但没有看到什么,所以我转向 SO。 :)
此外,在写这篇文章时,我意识到我显然缺少某些词汇。我将此帖子设为社区维基,请对其进行编辑,以便我可以学习所有内容的正确单词。
最佳答案
char
是可能的最小类型。
如果您碰巧知道在一个地方需要多个这样的 3 位值,您可以使用具有位域语法的结构:
struct foo {
unsigned int val1:3;
unsigned int val2:3;
};
因此在一个字节内得到其中的 2 个。理论上,您可以将 10 个这样的字段打包成一个 32 位“int”值。
关于c++ - 在 C++ 中定义可以容纳六个值的最小可能数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/740228/