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

Проверка флага готовности датчика никогда не срабатывает

Бит 7 регистра статуса выставляется, когда измерение готово. Отладчик показывает status = 0x80, но ветка не выполняется:

uint8_t status = sensor_read_status();
if (status & (1 << 7) == 1) {
    read_measurement();
}

В чём ошибка?

  • Сравнение == выполняется раньше побитового &
  • Сдвиг 1 << 7 переполняет тип uint8_t
  • Нужно читать статус как int, а не uint8_t
  • Бит 7 нумеруется с единицы, нужен сдвиг на 6

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

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

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

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