2012-06-08 30 views
8

[Parece extraño esto no existe, así que disculpas de antemano si se trata de un duplicado]igualdad lógico en C

Quiero comprobar la igualdad lógica en C. En otras palabras, quiero saber si dos los valores serían iguales si ambos se convirtieran en la forma normal asociada con expresiones lógicas.

En C99, creo que

(bool)a == (bool)b 

da lo que quiero. ¿Es eso correcto? ¿Cuál es la forma normal de escribir esto en C tradicional?

+2

Normal tradicional C no tiene tipo bool. –

+4

err, ¿chicos? lees el q? Sé que C tradicional no tiene bool. es por eso que estoy preguntando cómo escribirías eso en C. tradicional también, Als, '==' devolverá falso para '1 == 2', que no es lo que quiero. –

Respuesta

10

Por lo general ve esto:

if ((a == 0) == (b == 0)) 

O

if (!!a == !!b) 

Desde !!a evalúa a 1 si a es distinto de cero y 0 en caso contrario.

Espero que esto ayude!

1

No hay (bool) en la c. Verdadero/Falso se maneja usando int s. Puede verificar la igualdad booleana con

a ? b : !b 
+1

hay un bool en C99. –

+0

Ha habido un 'bool' durante los últimos 13 años ... –

+0

Quise decir c tradicional, no c99. –

6

En C, el cero es falso. Si desea convertir cualquier valor a su equivalente booleano, la forma estándar (bueno, excepto que casi nunca la necesita) es prefijar una expresión con !!, como en !!a. En el caso de su expresión, !!a == !!b puede ser simplificado a !a == !b

+0

cuando * es * ¿hay una necesidad? –

+0

Cuando a y b pueden tener diferentes valores distintos de cero, y desea saber si evaluarán el mismo booleano en una prueba de flujo de control posterior, como 'if()'. –

+0

oh, lo siento, leí mal tu respuesta original. –

2

en pre-C99 C, el tradiitional, forma idiomática "echar a bool" es con !!.