2015-08-08 2 views
0

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

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

ответ

3

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

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

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

+0

Вы делаете хорошие моменты. Хотя, по крайней мере, в Visual Studio 'uint64_t' является typedef для' unsigned long long', поэтому при использовании 'uint64_t', даже несмотря на то, что читаемость и понимание читателя увеличиваются, это не имеет никакого отношения к компилятору или процессору. – Casey

+3

Типы фиксированной ширины буквально там для удобочитаемости и понимания ... не говоря уже о том, что вы точно знаете, с чем имеете дело. Почему бы вам выбрать 'unsigned long long' над' uint64_t', если вы хотите использовать 64-битный тип? –

Смежные вопросы