¿Qué es! 0 en C?

Sé que en C, si las declaraciones y comparaciones FALSE = 0 y cualquier otra cosa es igual a verdadera.

Por lo tanto,

int j = 40 int k = !j k == 0 // this is true 

Mi pregunta maneja lo contrario. ¿En qué se convierte 0? 1?

 int l = 0 int m = !l m == ? // what is m? 

Se requiere que los operadores booleanos / lógicos en C produzcan 0 o 1.

De la sección 6.5.3.3/5 de la norma ISO C99:

El resultado del operador de negación lógica ! es 0 si el valor de su operando se compara con 0, 1 si el valor de su operando se compara con 0.

De hecho !!x es un idioma común para forzar que un valor sea 0 o 1 (yo personalmente prefiero x != 0 , sin embargo).

También vea Q9.2 de comp.lang.c FAQ .

§6.5.3.3 / 5: “¡El resultado del operador de negación lógica! Es 0 si el valor de su operando se compara desigualmente con 0, 1 si el valor de su operando se compara con 0. El resultado tiene el tipo int.”

Los otros operadores lógicos (por ejemplo, && , || ) siempre producen 0 o 1 también.

En general, sí, se convertirá en 1. Dicho esto, incluso si se trata de un comportamiento garantizado (del cual no estoy seguro) consideraría que el código basado en eso es bastante horrible.

Puedes asumir que es un verdadero valor. No asumiría nada más.

El operador Bang (!) Es el operador lógico y no encontrado comúnmente en C, C ++ y C #, por lo que

 !0 == 1 !1 == 0 

Esto se basa en el lenguaje característico de lo que se interpreta como verdadero o falso … en idiomas más modernos sería así

 !false == true !true == false 

Ver Ley DeMorgan sobre tablas de verdad …

!x se expandirá a (x==0) así que:

  • si x = 0 -> !x toma el valor de (0==0) = TRUE (valor 1)
  • si x! = 0 -> !x toma el valor de (x==0) = FALSO (valor 0)