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

Проверка инвертированного байта контрольной суммы всегда ложна

Протокол передаёт байт и его инверсию для контроля. Пришло data = 0xF0, check = 0x0F, но пакет отбрасывается:

uint8_t data = 0xF0, check = 0x0F;
if (~data != check) {
    return BAD_PACKET;
}

Почему условие истинно?

  • data расширяется до int, ~ инвертирует 32 бита
  • Оператор ~ для беззнаковых типов не определён
  • Для инверсии байта нужен оператор !, а не ~
  • Сравнение uint8_t с uint8_t идёт как char

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

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

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

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