<p>When I want an array of flags it has typically pained me to use an entire byte (or word) to store each one, as would be the result if I made an array of <code>bool</code>s or some other numeric type that could be set to 0 or 1. But now I wonder whether using a structure that is more space-efficient is worth it given the (albeit hopefully very slight) additional overhead of shifting and bit testing.</p>

<p>In my company we use Rogue Wave tools (though hopefully not for much longer) and it's their <code>RWBitVec</code> that I've used for this purpose up until now.</p>

It's mostly about saving memory.  If your array of bools is large enough that a 8x improvement on storage space is meaningful, then by all means, use a bitarray.
Note that the memory access is pretty expensive compared to the shift/and, so the bitarray approach is slightly faster than the array-of-chars.  Basically it comes down to memory versus programmer time.  Remember that premature optimization is a waste of time.  I'd use whichever approach is the easiest to develop, and then refactor only after it shows that it's a primary performance bottleneck.