Как извлечь старшие биты из каждого байта 64-битного целого числа в 8-битную битовую маску?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как извлечь старшие биты из каждого байта 64-битного целого числа в 8-битную битовую маску?

Сообщение Anonymous »

Для 64-битного целого числа я хотел бы извлечь все самые значимые биты из его восьми байтов и записать их в восьмибитную битовую маску. То есть хотелось бы эффективно реализовать функцию auto extract_msbs(uint64_t Mask) -> uint8_t;, где, например,

Код: Выделить всё

extract_msbs(0x'00110010'00010111'00000010'11001110'00100000'11001101'01011000'01111011) = 00010100
Кстати, именно эту операцию выполняет встроенная функция _mm_movemask_epi8 SSE2, но я не смог найти, как это было реализовано.
Идея, которую я пытался развить, заключается в умножении исходной 64-битной маски на некоторую константу, которая собирает все ведущие биты в старших 8 байтах, а затем сдвиг вправо на 56. Однако я этого не сделал. смог найти правильную константу (моя первоначальная идея была 0x0102040810204081ULL, но это дает неправильный результат 10000001 вместо 00000001 для 0x0000000000000080).
Может ли кто-нибудь придумать эффективный способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -integer-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»