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