Главная chevron_right Структура chevron_right Логические операторы chevron_right ! (logical NOT)

! (logical NOT)

Оператор ! инвертирует логическое значение: !true даёт false и наоборот — удобно для проверки обратных условий и переключения флагов.

Полная статья

Описание

Логический NOT (!) — унарный оператор, который переворачивает логическое значение выражения. Если операнд равен false, результат будет true, и наоборот. Это удобно, когда нужно проверить «обратное» условие или переключить флаг без явного сравнения.

Пример кода

Чаще всего ! встречается прямо внутри условия оператора if:

    if (!x) { // если x не истинно
      // операторы
    }

Также оператор можно использовать, чтобы инвертировать значение логической переменной:

    x = !y; // в x сохраняется инвертированное значение y

Где применяется

  • Переключение состояния — инвертировать флаг bool одной строкой: flag = !flag;.
  • Проверка «не выполнено» — удобно читать условие вида if (!isConnected) вместо if (isConnected == false).
  • Отрицание функции — когда функция возвращает true при успехе, а вам нужно обработать ошибку: if (!sensor.begin()).
  • Логические цепочки — комбинировать с && и || для сложных условий.

Практические замечания

  • ! работает с любым выражением, которое приводится к bool. Ноль считается false, любое ненулевое значение — true.
  • Не путайте ! (логический NOT) и ~ (побитовый NOT). Оператор ~ инвертирует каждый бит целого числа, а ! возвращает только true или false. Применение ~ там, где ожидается логический результат, — распространённая ошибка.
  • Двойное отрицание !!x — это способ явно привести любое число к bool (0false, всё остальное → true). Иногда используется намеренно, но обычно лучше написать явное сравнение для ясности.
  • Если ! применяется к целому числу, результат будет 1 (тип int), а не true (тип bool). В большинстве случаев это не важно, но при строгой типизации стоит учитывать.

Полезные материалы