44

I recently started learning to write code, and in my book I came across this question. "Why is a Boolean value stored as a byte inside of a computer when it only requires one bit?" can someone shed more light on this question?

3 Answers3

54

It has to do with what the CPU can easily address. For example on an x86 processor there is an eax (32 bits), ax (16 bits) and a ah (8 bits) but no single bit register. So in order for it to use a single bit the CPU will have to do a read/modify/write to change the value. If it is stored as a byte a single read or write can be used to inspect/change the value.

Additionally one might wonder if it would be better to use a single bit vs a full byte, after all a byte will be wasting 7 bits. Unless space is a constraint the one should go for the byte because, at least the x86 and I think others, there is usually an instructions to quickly set/clear a bool which is much quicker than the read/modify/write of a single bit. From personal measurements I have seen the read/mod/write method be 5x slower than the single instruction method.

barrem23
  • 3,171
6

As @barrem23 explains, the data must be addressable, and the smallest boundary on conventional architectures is a byte.

But since this question is tagged as , it may be worth pointing out that std::vector<bool> is specialized to allow individual elements to be stored as bits. This will save space by sacrificing some functionality (for example, std::search may not work).

chrisaycock
  • 6,655
0

It will never be 1 bit, if you group 8 booleans in one byte, you still need 3 bits for each boolean for addressing (2^3 space), that is to know which bit inside the byte belongs to which boolean.

Also you might need one additional bit for nullability checking since you can't have a null bit, so you need one more bit for that, and you end up having 5 bits for each boolean rather than 1 byte (1 for value, 1 for null, and 3 for addressing), which is not that significant optimization.

lennon310
  • 3,242
amralieg
  • 51
  • 3