bool realisieren?

Gast #5851
Lesenswert?

Gar nicht

Du kannst bestenfalls mehrere BOOL-Werte in eine Bitvariable 
zusammenfassen. Aber mindestens 1 Byte benötigst du.

BTW, wenn du wissen willst wie so eine Bitvariable deklariert wird:

typedef unsigned char BYTE; // Damit es es einfacher geht
#define TRUE 0
#define FALSE 1

struct {
BYTE bBool1:1;
BYTE bBool2:1;
BYTE bBool3:1;
BYTE bBool4:1;
BYTE bBool5:1;
BYTE bBool6:1;
BYTE bBool7:1;
BYTE bBool8:1;
} bitVar;

So hast du 8 Boolsche Variablen, di zusammen nur 1 Byte Platz benötigen. 
Die Variablen sprichst du wie folgt an:

bitVar.bBool1 = TRUE; // Setzt die Variable bBool1 auf TRUE
bitVar.bBool2 = FALSE; // Setzt die Variable bBool1 auf TRUE

if (bitVar.bBool3) {   // Testet die Variable bBool3
TuEtwas();
}

Gruss
Christian
#1209459
Lesenswert?

BitteRichtiger wrote:
> Sorry, schon ewig alt, aber:
>
> #define TRUE 1
> #define FALSE 0
>
> dann klappt es auch mit If(TRUE) ...
Jo, dann klappen aber damit keine Vergleiche, weil in C nunmal nicht nur 
die 1 TRUE ist, sondern alles, was nicht 0 ist. TRUE == 1 gilt nur als 
Ergebnis von Operationen (Eine Operation, die einen Wahrheitswert 
zurückgibt, liefert per Definition 0 für FALSE und 1 für TRUE).

Abgesehen davon bist Du vielleicht Rekordhalter im Herauskramen 
historischer Threads für nichts und wieder nichts geworden... Die Idee 
mit dem #define hatten nämlich schon gaaaanz viele andere, und 
diejenigen, die hier vor sechseinhalb Jahren diskutiert haben, dürfte 
das kaum noch interessieren...

EDIT:
Aaaargh, sehe jetzt erst, dass Du das vertauschte 0 und 1 meintest. 
Toll, aber auch der Fehler hätte niemanden gejuckt, wenn Du den Thread 
in Frieden hättest ruhen lassen...
Gast #1211017
Lesenswert?

> Also bei mir sind True/False so definiert:
>
> #define TRUE  (1==1)
> #define FALSE (!TRUE)

Und welchen Vorteil erhoffst du dir davon? Es hat exakt denselben Effekt 
wie:
1
#define TRUE 1
2
#define FALSE 0

Mein Vorschlag:

#include <stdbool.h>

Dann hat man den Typ bool mit den Werten true und false, wie in C++.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren