Поверните значение на 1 или 0
Что?
!!
обычно используется, если вы хотите преобразовать любое ненулевое значение в 1, будучи уверенным, что 0 останется 0.[1]
Унарный оператор !
(НЕ) превращает любое значение в ноль, если оно отлично от нуля, и в единицу, если оно равно нулю. Похоже на !!
. Использование этого унарного оператора дважды превращает значение в единицу, если оно не равно нулю, и остается равным нулю, если оно равно нулю.
Звучит сложно? Давайте посмотрим, как это работает, на следующих примерах.
#include <stdio.h> int main() { printf("!0 -> %d, !!0 -> %d // integer zero\n", !0, !!0); printf("!1 -> %d, !!1 -> %d // integer one\n", !1, !!1); printf("!2 -> %d, !!2 -> %d // positive integer\n", !2, !!2); printf("!-1 -> %d, !!-1 -> %d // negative integer\n", !-1, !!-1); printf("!0.5 -> %d, !!0.5 -> %d // floating point number\n", !0.5, !!0.5); printf("!'A' -> %d, !!'A' -> %d // char\n", !'A', !!'A'); char arry[10] = {0}; char *null_ptr = NULL; printf("!arry -> %d, !!arry -> %d // array\n", !arry, !!arry); printf("!null_ptr -> %d, !!null_ptr -> %d // null pointer\n", !null_ptr, !!null_ptr); return 0; }
Результат будет:
!0 -> 1, !!0 -> 0 // integer zero !1 -> 0, !!1 -> 1 // integer one !2 -> 0, !!2 -> 1 // positive integer !-1 -> 0, !!-1 -> 1 // negative integer !0.5 -> 0, !!0.5 -> 1 // floating point number !'A' -> 0, !!'A' -> 1 // char !arry -> 0, !!arry -> 1 // array !null_ptr -> 1, !!null_ptr -> 0 // null pointer
Ууууу! Вот. Операторы !
и !!
переводят все типы переменных в целочисленный тип со значением 0 или 1. Вы также можете проверить это онлайн с помощью Online C Compiler — онлайн-редактор.
Почему?
Теперь мы знаем, как двойной восклицательный знак («!!») работает в C. Но почему? Зачем нам это нужно?
Иногда компилятор выдавал предупреждения или ошибки, если мы используем оператор if
для истинного или ложного значения с нелогическим или нецелочисленным значением. Или, если вы хотите вернуть 1 или 0 с типом integer из-за объявления функции, помимо приведения возвращаемого значения с помощью (int)
, вы также можете использовать !!
для преобразования типа в целое число.
Как правило, это совет, который порадует компилятор, особенно в мире встраиваемых систем.
Удачного кодирования!
Ссылка
- "Что "!!" в С? [дубликат] — Stack Overflow»
- c: двойной восклицательный знак — одурманить разработчика
- "Что !! (двойной восклицательный знак) на языке C? — Совет С»