2010-04-29 2 views
1

В C++, являются ли биты на самом деле набором bools? Разве это не побеждает цель использования BitSet, потому что bools - 32 бита (я думаю ...)?Действительно ли Bitsets Bools?

+2

Имейте в виду, что 'sizeof (bool)' определяется реализацией - это может быть 1 (что, вероятно, будет 8 бит), но это не обязательно. Разумеется, он не должен быть 32-битным (на самом деле для MSVC это 1 или 8 бит). –

ответ

8

Они представляют коллекцию bool, но эти значения действительно хранятся как биты в unsigned long.

Размер bool не требуется ни одного количества бит, ни один из unsigned long. (Хотя минимальное количество бит для любого типа данных равно 8, а для unsigned long оно должно быть не менее 32.)

+0

Я думаю, вы имеете в виду «по крайней мере 32», а не «больше 32», хотя на самом деле это должно быть только так долго, а int или дольше, а int может быть меньше 32 бит (например, в 16-битном процессоре). На практике, однако, 32 бита являются вероятным размером, даже в 16 или 8-битной платформе – Clifford

+0

@Clifford: Я имею в виду, по крайней мере, больше, чем слишком строгий. Тем не менее, я прав, заявляю, что длинный должен быть 32 бит или выше. http://stackoverflow.com/questions/271076/what-is-the-difference-between-an-int-and-a-long-in-c/271132#271132 – GManNickG

+0

"больше чем" было просто * неправильно * скорее чем * слишком строгий *. Однако я исправляю минимальный размер 'long' - извинения. – Clifford

6

Нет, std::bitset s на самом деле не bools, они фактически являются битами. Кто сказал вам, что они были дураками?

Возможно, вы путаетесь с полемикой над std::vector<bool>? Это, по крайней мере, противоположная проблема, поскольку она выглядит как набор bools, но на самом деле является битрейтом.

+1

Реальное противоречие по std :: vector заключается в том, что он не является реальным контейнером и разрушает все виды поведения, которые должен иметь std :: vector. –

+2

Еще хуже, поскольку я слышу, что std :: vector нарушает обычные правила для std :: vector is * intental * - он был написан таким образом в качестве примера того, как написать специализированную реализацию std :: vector , – Mac

+1

Этот ответ гораздо интереснее, чем вопрос! – Clifford