I want to define my own datatype that can hold a single one of six possible values in order to learn more about memory management in c++. In numbers, I want to be able to hold 0 through 5. Binary, It would suffice with three bits (101=5), although some (6 and 7) wont be used. The datatype should also consume as little memory as possible.
Im not sure on how to accomplish this. First, I tried an enum with defined values for all the fields. As far as I know, the values are in hex there, so one ‘hexbit’ should allow me to store 0 through 15. But comparing it to a char (with sizeof) it stated that its 4 times the size of a char, and a char holds 0 through 255 if Im not misstaken.
#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; }
Ive clearly misunderstood something, but fail to see what, so I turn to SO. 🙂
Also, when writing this post I realised that I clearly lack some parts of the vocabulary. Ive made this post a community wiki, please edit it so I can learn the correct words for everything.
A
charis the smallest possible type.If you happen to know that you need several such 3 bit values in a single place you get use a structure with bitfield syntax:
and hence get 2 of them within one byte. In theory you could pack 10 such fields into a 32-bit ‘int’ value.