Miz*_*zor 2 c++ memory binary hex memory-management
我想定义自己的数据类型,它可以包含六个可能值中的一个,以便了解有关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;
}
Run Code Online (Sandbox Code Playgroud)
我明显误解了一些事情,但没有看到什么,所以我转向了SO.:)
另外,在写这篇文章时,我意识到我显然缺少词汇的某些部分.我把这篇文章作为一个社区维基,请编辑它,这样我就可以学到正确的单词.
A char
是最小的类型.
如果您碰巧知道在一个地方需要几个这样的3位值,那么您将使用具有位域语法的结构:
struct foo {
unsigned int val1:3;
unsigned int val2:3;
};
Run Code Online (Sandbox Code Playgroud)
因此在一个字节内得到2个.从理论上讲,您可以将10个这样的字段打包成32位"int"值.