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)
.