Использовать std::bitset или фундаментальный тип того же размера?

Я создаю Chess Solver и решил использовать битборды. Удобно, что на стандартной шахматной доске 64 квадрата. Это хорошо, так как в 64-битных операционных системах одна битовая плата может уместиться в одном регистре.

Тем не менее, существуют ли фундаментальные различия (размер (память и код), скорость, сложность, использование памяти и т. Д.) В использовании std::bitset<64> и функции в нем или основной тип "того же" размера unsigned long long и выполняя битовую ручку вручную?

1 ответ

Решение

uint64_t наверное. Вы хотите выполнять операции, которые не доступны на std::bitset, включая почти все арифметические операции, битовое сканирование, использование частей платы в качестве индекса в массиве и встроенные функции SSE, если вы серьезно к этому относитесь.

Например (не исчерпывающий список каким-либо образом, только несколько простых примеров) в o ^ (o-2r) (и его двоюродный брат), более продвинутая Квинтэссенция Гиперболы, как часть извлечения младшего установленного бита и т. Д.

Вы могли бы использовать std::bitset но вы бы конвертировали его обратно в некоторое целое число.

Другие вопросы по тегам