Использовать std::bitset или фундаментальный тип того же размера?
Я создаю Chess Solver и решил использовать битборды. Удобно, что на стандартной шахматной доске 64 квадрата. Это хорошо, так как в 64-битных операционных системах одна битовая плата может уместиться в одном регистре.
Тем не менее, существуют ли фундаментальные различия (размер (память и код), скорость, сложность, использование памяти и т. Д.) В использовании std::bitset<64>
и функции в нем или основной тип "того же" размера unsigned long long
и выполняя битовую ручку вручную?
1 ответ
uint64_t
наверное. Вы хотите выполнять операции, которые не доступны на std::bitset
, включая почти все арифметические операции, битовое сканирование, использование частей платы в качестве индекса в массиве и встроенные функции SSE, если вы серьезно к этому относитесь.
Например (не исчерпывающий список каким-либо образом, только несколько простых примеров) в o ^ (o-2r) (и его двоюродный брат), более продвинутая Квинтэссенция Гиперболы, как часть извлечения младшего установленного бита и т. Д.
Вы могли бы использовать std::bitset
но вы бы конвертировали его обратно в некоторое целое число.