• Привет !

    На форуме есть зеркало в ТОРе:rusfwz3cukdej7do.onion

    Обратная связь:info@ru-sfera.org

    Всего доброго !

Информация Алгоритмические C/C++ хаки, трюки (1 Viewer)

Кто просматривает этот контент: "Тема" (Всего пользователей: 0; Гостей: 1)

0b170xor

Уважаемый пользователь
Форумчанин
Регистрация
13.01.2020
Сообщения
70
Репутация
26
Бывает интересуют задачи которые можно решить очень просто, но вы не знаете как решить их проще своего изначального решения.
Книга поможет посмотреть на разные реализации алгоритмов.

Например переворачивание 32 битного значения можно сделать так:

C:
uint32_t reverse(uint32_t x, int bits)
{
    x = ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1);
    x = ((x & 0x33333333) << 2) | ((x & 0xCCCCCCCC) >> 2);
    x = ((x & 0x0F0F0F0F) << 4) | ((x & 0xF0F0F0F0) >> 4);
    x = ((x & 0x00FF00FF) << 8) | ((x & 0xFF00FF00) >> 8);
    x = ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16);
    return x >> (32 - bits);
}
или вот так с помощью SSE3 SIMD:

C:
uint32_t reverse(uint32_t x, int bits)
{
    x = _mm_cvtsi128_si32(rbit32(_mm_cvtsi32_si128(input)));
    return x >> (32 - bits);
}
есть вариант с asm вставкой:

C:
uint32_t reverse(uint32_t x)
{
    uint32_t out = 0;
    asm("RBIT %0, %1" : "=r" (out) : "r" (x));
    return out;
}
Книгу можно скачать тут:
 
Автор темы Похожие темы Форум Ответы Дата
Антоха Любимые книги и журналы, а также вырезки 1
Похожие темы
Книги по C++
Верх