Подтвердить что ты не робот

!! c, является двумя НЕ?

Я читаю этот код и получаю эту строку

 switch (!!up + !!left) {

что такое оператор !!? два логических НЕ?

4b9b3361

Ответ 1

да, это два nots.

!!a 1, если a отличен от нуля и 0, если a есть 0

Вы можете думать о !! как о заклинании {0,1}. Я лично считаю, что использование плохая попытка казаться фантазией.

Ответ 2

Вы можете представить это так:

!(!(a))

Если вы делаете это шаг за шагом, это имеет смысл

result = !42;    //Result = 0
result = !(!42)  //Result = 1 because !0 = 1  

Это вернет 1 с любым числом (-42, 4.2f и т.д.), но только с 0, это произойдет

result = !0;    //Result = 1
result = !(!0)  //result = 0

Ответ 3

!! является более переносимой (pre-C99) альтернативой (_Bool).

Ответ 4

Ты прав. Это два не. Чтобы узнать, почему это нужно сделать, попробуйте этот код:

#include <stdio.h>

int foo(const int a)
{
    return !!a;
}

int main()
{
    const int b = foo(7);
    printf(
        "The boolean value is %d, "
        "where 1 means true and 0 means false.\n",
        b
    );
    return 0;
}

Он выводит The boolean value is 1, where 1 means true and 0 means false. Если вы отбрасываете !!, он выдает The boolean value is 7, where 1 means true and 0 means false.