@youngblood

Как вставить перед каждым битом в числе, три нулевых бита?

К примеру есть число:
а = 10101111 (bin - 8 bit)
Необходимо с помощью битовых операций вставить после каждого бита числа, три нулевых бита, чтобы получилось вот так:
b= 00010000000100000001000100010001 (bin - 32 bit)

Как бы мне это сделать для любых чисел "а" восьми битных?
  • Вопрос задан
  • 793 просмотра
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
unit32_t sparse(uint8_t src) {
  uint32 dst = src;
  dst = ((dst & 0xF0) << 12) | (dst & 0xF);
  dst = ((dst & 0xC000C) << 6) | (dst & 0x30003);
  dst = ((dst & 0x2020202) << 3) | (dst & 0x1010101);
  return dst;
}
Ответ написан
0. Акумулятор = 0
1. Шифтишь число вправо, получаешь бит;
2. Шифтишь аккумулятор вправо на 4;
3. Аккумулятор = Аккумулятор OR бит (из п.1)
4. Повторяешь п.1-3 для остальных семи битов
Ответ написан
uint32_t sparse(uint8_t src) {
    uint32_t dst = 0;
    uint32_t shift = 0;

    while(src) {
        dst |= (src & 1) << shift;
        src >>= 1;
        shift += 4;
    }

    return dst;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы