Gast
#2949648
Hi, welchen dezimalen Wert hat ein TRUE oder FALSE wenn ich boolean nehme?
|
Anzeige
|
True und False
Gast
#2949648
Hi, welchen dezimalen Wert hat ein TRUE oder FALSE wenn ich boolean nehme?
Gast
#2949653
42
Gast
#2949654
Schau' in den header-file nach. In welcher Sprache?
Gast
#2949657
kann true 255 sein?
Gast
#2949659
in der Sprache C.
Gast
#2949661
FALSE = 0 TRUE = 1 //oft
Gast
#2949662
ja,kann auch 255 sein. In C gilt: FALSE ist gleich Null TRUE ist ungleich Null
Gast
#2949672
so solltest Du es sehen:
printf("TRUE %d",(int)(!0));
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.
Gast
#2949685
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.
Gast
#2949692
>!0 ist laut Standard 1
Hab aber auch schon Compiler gesehen, die 255 lieferten.
Gast
#2949706
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!
Gast
#2949713
PWM schrieb: >>!0 ist laut Standard 1 > Hab aber auch schon Compiler gesehen, die 255 lieferten. Das waren dann eben keine C-Compiler.
Gast
#2949718
@Dul welchen Compiler hast Du ?
Gast
#2949733
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.
Gast
#2949738
Ich habe es schon oft so gesehen: #define FALSE 0 #define TRUE !FALSE ...pastt dann zu 1 und 255. 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
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:
Gast
#2949768
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. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|