nikerAI
@nikerAI
ЧТО?

Как правильно сдвинуть биты?

У меня есть задача - нужно шифровать строку путем битовых операций(сдвигов).
Есть входная группа из трех символов, биты которых нужно брать и использовать для шифрования путем присваивания их переменной "A" следующим путем:
A = 0 a7 1 b6 c5 a3 b2 c1

Мне нужно убедиться, что логические операторы и шаги сдвига расположены верно.

Вот кусок кода с основной логикой:
int encodeGroup(const string& group) 
{
    unsigned int A = 0;

    if (group.length() < 3) {
        return -1;
    }
    
    A = (0 | ((group[0] & 0x80) >> 1) | 1 | ((group[1] & 0x70) >> 2) | ((group[2] & 0x60) >> 2) | ((group[0] & 0x40) >> 1) |((group[1] & 0x30) >> 1) | ((group[2] & 0x20) >> 1));
    
return A;
}
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Идея правильная, но битовые маски - нет. Чтобы взять a7 надо действительно сделать & 0x80. Но для a6 надо брать & 0x40. Потом идут 0x20, 0x10, 0x08, 0x04, 0x02, 0x01.

Ваше 0x70 - это 0b01110000 - три бита вместо одного. Повторите 16-ричную систему счисления.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы