xztau
@xztau
Я

Как правильно собрать слово из битов?

Вот так
result = state[0]<<0|state[1]<<1|state[2]<<2|state[3]<<3|state[4]<<4|state[5]<<5|state[6]<<6|state[7]<<8|
state[8]<<8|state[9]<<9|state[10]<<10|state[11]<<11|state[12]<<12|state[13]<<13|state[14]<<14|state[15]<<15;

Работает
А вот так
for (iterator = 0; iterator < 16; iterator++){
result |= state[iterator]<<iterator;

Не работает.
Посчитал на бумажке, вроде бы всё нормально. Но компутер при установке первого или последнего бита даёт результат
32769
Где я мог ошибиться?
  • Вопрос задан
  • 418 просмотров
Пригласить эксперта
Ответы на вопрос 1
  • Надеюсь, result вначале инициализируется нулём и обладает ёмкостью больше 16 бит (или беззнаковый)?
  • А вообще, по памяти, операция сдвига работает только с константами т.е. нельзя писать << i. Можно переделать так:
    for (iterator = 0; iterator < 16; iterator++){
    result = result<<1;
    if(state[iterator] > 0) result++;

    ну или ++ замени на "ИЛИ" с единицей. Можно даже делать "или" сразу со state[iterator]. Или заменить сдвиг умножением каунтера на 2 на каждой итерации (нужна отдельная переменная) и плюсовать его.
Ответ написан
Ваш ответ на вопрос

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

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