prioridad - !! c operador, ¿dos NO?
operadores relacionales en c++ (4)
Puedes imaginarlo así:
!(!(a))
Si lo haces paso a paso, esto tiene sentido
result = !42; //Result = 0
result = !(!42) //Result = 1 because !0 = 1
Esto devolverá 1 con cualquier número (-42, 4.2f, etc.) pero solo con 0 , esto sucederá
result = !0; //Result = 1
result = !(!0) //result = 0
Estoy leyendo este code , y tengo esta línea
switch (!!up + !!left) {
que es !! operador? dos NO lógicos?
Tienes razón. Son dos nots. Para ver por qué uno haría esto, pruebe este código:
#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;
}
Salidas The boolean value is 1, where 1 means true and 0 means false. Si sueltas el !! , sin embargo, emite The boolean value is 7, where 1 means true and 0 means false.
sí, son dos nots.
!!a es 1 si a no es cero y 0 si a es 0
¡¡Puedes pensar !! como fijación, por así decirlo, a {0,1} . Personalmente, considero que el uso es un mal intento de parecer elegante.
!! es una alternativa más portátil (antes de C99) a (_Bool) .