relacionales prioridad operadores operador logicos lenguaje jerarquia condicional asignacion aritmeticos c operators logical-operators

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