Вступить в клуб →
сложнаявопросБиты, целые типы и арифметика на МК

После «оптимизации» деления сдвигом фильтр смещения ушёл в минус

Усреднение восьми знаковых отсчётов смещения нуля:

int32_t sum = 0;
for (int i = 0; i < 8; i++) sum += offset[i];
int16_t avg = sum >> 3;   /* было: sum / 8 */

После замены / 8 на >> 3 калибровка на отрицательных смещениях систематически занижена на единицу: при sum = -3 раньше было 0, теперь -1. Что происходит?

  • Сдвиг округляет вниз, а деление — к нулю
  • Сдвиг знакового числа всегда даёт мусор
  • Сдвиг вправо делит на 16, а не на 8
  • Компилятор заменил сдвиг логическим

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела