! (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(0→false, всё остальное →true). Иногда используется намеренно, но обычно лучше написать явное сравнение для ясности. - Если
!применяется к целому числу, результат будет1(типint), а неtrue(типbool). В большинстве случаев это не важно, но при строгой типизации стоит учитывать.