2012-06-08 12 views
8

[Es scheint seltsam, diese nicht existiert, so entschuldige mich im Voraus, wenn es ein Duplikat]Logische Gleichheit in C

ich für logische Gleichheit in C. Mit anderen Worten testen wollen, ich, ob zwei wissen wollen Werte wären gleich, wenn beide auf die mit logischen Ausdrücken verknüpfte Weise konvertiert würden.

In C99, ich denke, dass

(bool)a == (bool)b 

gibt, was ich will. Ist das korrekt? Wie lautet die normale Schreibweise in traditionellem C?

+2

Plain traditionelles C hat keinen Bool-Typ. –

+4

Fehler, Leute? du liest das q? Ich weiß, dass traditionelles C nicht bool hat. Deshalb frage ich, wie Sie das in traditionelles C schreiben würden. Auch, Als, '==' wird false für '1 == 2' zurückgeben, was nicht das ist, was ich will. –

Antwort

10

Sie sehen in der Regel so:

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

Oder

if (!!a == !!b) 

Da !!a wertet auf 1, wenn ein ansonsten ungleich Null und 0 ist.

Hoffe, das hilft!

1

Es gibt keine (bool) in traditionellen c. Wahr/Falsch wird unter Verwendung von int s behandelt. Sie können nach boolescher Gleichheit mit

suchen
a ? b : !b 
+1

In C99 gibt es einen Bool. –

+0

In den letzten 13 Jahren gab es einen 'Bool' ... –

+0

Ich meinte traditionelles c, nicht c99. –

6

In C ist Null falsch. Wenn Sie einen beliebigen Wert in sein boolesches Äquivalent konvertieren möchten, ist der Standardweg (nun, abgesehen davon, dass es fast nie nötig ist) darin, einen Ausdruck mit !! voran zu stellen, wie in !!a. Im Fall des Ausdrucks, !!a == !!b kann !a == !b

+0

wenn * ist * da ein Bedarf dafür? –

+0

Wenn a und b verschiedene Werte ungleich Null haben können und Sie wissen möchten, ob sie in einem nachfolgenden Control-Flow-Test, z. B. "if()", denselben booleschen Wert verwenden. –

+0

oh, tut mir leid, habe deine ursprüngliche Antwort falsch gelesen. –

2

In prä-C99 C vereinfacht werden, die tradiitional, idiomatische Weg zu "cast Bool" ist mit !!.