В C++, являются ли биты на самом деле набором bools? Разве это не побеждает цель использования BitSet, потому что bools - 32 бита (я думаю ...)?Действительно ли Bitsets Bools?
ответ
Они представляют коллекцию bool
, но эти значения действительно хранятся как биты в unsigned long
.
Размер bool
не требуется ни одного количества бит, ни один из unsigned long
. (Хотя минимальное количество бит для любого типа данных равно 8, а для unsigned long
оно должно быть не менее 32.)
Я думаю, вы имеете в виду «по крайней мере 32», а не «больше 32», хотя на самом деле это должно быть только так долго, а int или дольше, а int может быть меньше 32 бит (например, в 16-битном процессоре). На практике, однако, 32 бита являются вероятным размером, даже в 16 или 8-битной платформе – Clifford
@Clifford: Я имею в виду, по крайней мере, больше, чем слишком строгий. Тем не менее, я прав, заявляю, что длинный должен быть 32 бит или выше. http://stackoverflow.com/questions/271076/what-is-the-difference-between-an-int-and-a-long-in-c/271132#271132 – GManNickG
"больше чем" было просто * неправильно * скорее чем * слишком строгий *. Однако я исправляю минимальный размер 'long' - извинения. – Clifford
Нет, std::bitset
s на самом деле не bools, они фактически являются битами. Кто сказал вам, что они были дураками?
Возможно, вы путаетесь с полемикой над std::vector<bool>
? Это, по крайней мере, противоположная проблема, поскольку она выглядит как набор bools, но на самом деле является битрейтом.
Реальное противоречие по std :: vector
Еще хуже, поскольку я слышу, что std :: vector
Этот ответ гораздо интереснее, чем вопрос! – Clifford
Имейте в виду, что 'sizeof (bool)' определяется реализацией - это может быть 1 (что, вероятно, будет 8 бит), но это не обязательно. Разумеется, он не должен быть 32-битным (на самом деле для MSVC это 1 или 8 бит). –