Forum: Mikrocontroller und Digitale Elektronik True und False


von Dul (Gast)


Lesenswert?

Hi,
welchen dezimalen Wert hat ein TRUE oder FALSE wenn ich boolean nehme?

von Klaus (Gast)


Lesenswert?

42

von Zufallsgast (Gast)


Lesenswert?

Schau' in den header-file nach.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

In welcher Sprache?

von Dul (Gast)


Lesenswert?

kann true 255 sein?

von Dul (Gast)


Lesenswert?

in der Sprache C.

von PWM (Gast)


Lesenswert?

FALSE = 0
TRUE = 1 //oft

von PWM (Gast)


Lesenswert?

ja,kann auch 255 sein.

von B. S. (bestucki)


Lesenswert?

In C gilt:
FALSE ist gleich Null
TRUE ist ungleich Null

von PWM (Gast)


Lesenswert?

so solltest Du es sehen:
printf("TRUE %d",(int)(!0));

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

In C gibt es weder TRUE noch FALSE, und auch kein True und auch kein 
False.

Per stdbool.h gibt es true und false, und die sind i.d.R !0 bzw. 0.

von DirkB (Gast)


Lesenswert?

0 gilt als logisch falsch
Alles ungleich 0 gilt als logisch wahr
!0 ist laut Standard 1

C99-Standard schrieb unter 6.5.3.3 Unary arithmetic operators
> The result of the logical negation operator ! is 0 if the value of its
> operand compares unequal to 0, 1 if the value of its operand compares
> equal to 0. The result has type int.

von PWM (Gast)


Lesenswert?

>!0 ist laut Standard 1
Hab aber auch schon Compiler gesehen, die 255 lieferten.

von Steel (Gast)


Lesenswert?

DirkB schrieb:
> 0 gilt als logisch falsch
>
> Alles ungleich 0 gilt als logisch wahr
>
> !0 ist laut Standard 1

Ja, aber das heißt nicht, dass true = 1 sein muss!

von Maximilian (Gast)


Lesenswert?

PWM schrieb:
>>!0 ist laut Standard 1
> Hab aber auch schon Compiler gesehen, die 255 lieferten.

Das waren dann eben keine C-Compiler.

von PWM (Gast)


Lesenswert?

@Dul
welchen Compiler hast Du ?

von Stefan (Gast)


Lesenswert?

Da hier nicht nur die User sondern auch die Programmiersprachen sich 
nicht einig sind, halte Dich an die Fakten:

In C gibt es kein True. Es gibt Ausdrücke, die wahr oder falsch sind, 
aber es ist niht einheitlich definiert, welcher numerische Wert (oder 
Werte) wahr sind.

Auf jeden Fall ist falsch immer 0, da sind sich die Compiler wenigstens 
einig.

Benutze einfach keine Konstanten für wahr und falsch, dann bist DU auf 
der sicheren Seite.

von Bastler (Gast)


Lesenswert?

Ich habe es schon oft so gesehen:

#define FALSE 0
#define TRUE !FALSE

...pastt dann zu 1 und 255.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Stefan schrieb:

> In C gibt es kein True. Es gibt Ausdrücke, die wahr oder falsch sind,
> aber es ist niht einheitlich definiert, welcher numerische Wert (oder
> Werte) wahr sind.

In C (und C++) sind alle Werte != 0 waht, d.h.  in
1
if (x)
2
{
3
   <Code>
4
}

Wird <Code> genau dann ausgeführt, wenn x nicht zu 0 auswertet.

Daher sollte ein Vergleich zweier Werte, die "wahr" oder "falsch" sein 
können, so aussehen:
1
if (!boolean1 == !boolean2)
2
{
3
   <Code wenn beide boolean "wahr" oder beide "falsch" sind>
4
}

von __ (Gast)


Lesenswert?

Wenn der Compiler das Carry/Zero flag für True/False hernimmt, dann
ist meistens nur diese Deklaration richtig:

#define TRUE !(1==0)
#define FALSE !TRUE

Vielfach wird auch der Bool Operator (!!) hergenommen, um den Ausdruck 
zu
optimieren, bei einer Zuweisung jedoch wird dann der Bool Datentyp 
richtig
zugewisen.
 foo = !!bar ;
 ist dasselbe als
 foo = bar?1:0;

Es gibt aber auch Compiler, welche -1 (255 im Falle von Char) verwenden.
Dies ist darin begründet, dass zumindest in den Anfängen dieses 
Konstruct
oft verwendet wurde, und dies geht nurmal bei -1, in vereinfachter Form:
 (foo==bar)&foobar
wobei das (foo=bar) meist durch Preprozessorexpansion zustande kam.
Einige Compiler unterstützen diese Art der Kodierung auch, obwohl sie 
ansonsten für Bool eine 0/1 ausgeben.
Auch erleichtert dies diese Form des Konstructs:
 if (foo == bar && foobar) welche auch noch häufig anzutreffen ist.
Wenn bool eine -1 ist, dann kann der Compiler die && mit einem & 
ersetzten,
was einen Sprung weniger bedeutet, eine Cacheleerung weniger und weniger 
Ausführungszeit.

Pauschal lässt sich das nicht sagen, da bool vielfach auf HW-Flags 
zurückgreift und einige Spezialfälle zu beachten sind.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.