Как видно из названия этого вопроса, я хочу знать, как лучше всего смешивать блоки битов в целое число (особенно в 64-битных беззнаковых)
например у меня есть 8-битное целое, где
это биты 0000 1111 микс 4 бит на 4
биты = 0101 0101
пример 2: 0010 0110
0 1 1 0 вправо
0.0.1.0 осталось
= 00011100
смешать 4 бита на 4 бита = 0001 1100 Простое,. места, заполненные битами правого блока
Что я делаю правильно сейчас:
uint64_t mix32(uint64_t v) {
uint64_t ret=0;
int x=0;
for(int i=0; i<32; i++) {
setbit(ret, x, getbit(v, i));
x++;
setbit(ret, x, getbit(v, i+32));
x++;
}
return ret;
}
где setbit - это макрос, который устанавливает или очищает бит в определенной позиции.
Что именно мне нужно
смешивать каждые 32 бита со следующими 32 бита
смешайте каждые 16 бит со следующими 16 битами
смешивать каждые 16 бит с последующими 16 битами
смешайте каждые 8 бит со следующими 8 битами
так далее...
Я надеюсь, что смогу сделать отдых, если доступен один пример таких битовых операций. Я много смотрел в Google, но в итоге получил учебники, которые не демонстрируют такой сценарий.
Будь здоров.