the reasons booleans are ''1 byte'' is because that''s the smallest amount of space you can address on your target platform.
btw, nearly everyone knows about this ''space optimization'', and have implemented it much less naively (no offense).
a common idiom of this ''optimization'' in C++ is simply ..
char const FLAG_1 = 0x01;char const FLAG_2 = 0x02;char const FLAG_3 = 0x04;char flags = 0;flags |= FLAG_3; //set flag_3.flags |= FLAG_1; //set flag_1if(flags & FLAG_3) do_something(); //if flag_3 is set