Typ boolean in C
-
hallo zusammen,
ich möchte gern in C das datentyp boolean erzeugen, dafür habe ich short int verwendet. Es ist aber schade 16 bits zu verbrauchen um nur die zustände 0 und 1 darzustellen. Kann man vielleicht das typ boolean in C effektiver erzeugen als mit short int?Grüsse
Dreisson
-
hier nix gefunden?
-
Wenn du einen C99-Compiler einsetzt, kannst du _Bool benutzen oder gleich bool wenn du die stdbool.h einbindest. Ansonsten ist char idR kleiner als ein short.
-
-
Wenn short zu groß ist für deine Zwecke, nimm doch char (was kleineres wirst du alleinstehend nicht in die Hände bekommen).
Wenn du viele bool-Werte auf einen Haufen hast, fass doch alle zu einem int-Wert zusammen und greif dann mit Bit-Operatoren auf die einzelnen Werte zu. Alternativ kannst du auch Bitfields verwenden.
-
öhm..
ich hatt eigentlich auf nen anderes post geantwortet.. zum Thema QAM?
Wie was wann wo?
-
dreisson schrieb:
Kann man vielleicht das typ boolean in C effektiver erzeugen als mit short int?
wenn du mit effektiv zugriffsgeschwindigkeit meinst: das schnellste wäre wohl 'int', ist aber eine leichte speicherplatzverschwendung.
-
Das Link ist sehr gut. Hast du andere ähnlich links?
-
Undertaker schrieb:
wenn du mit effektiv zugriffsgeschwindigkeit meinst: das schnellste wäre wohl 'int', ist aber eine leichte speicherplatzverschwendung.
Die wird aber erst relevant, wenn die Booleans gehäuft auftreten, für Bitvektoren zum Beispiel.
-
Die booleans treten wohl sehr häufig vor, da ich ein signal aus einer bitfolge der Länge bis zu (4096*512)bits oder mehr. Genau weiss ich noch nicht.
-
Wenn es dir so sehr um den Platz geht, pack jeweils 16 bool-Werte in einen short und sprich die über Bit-Operatoren an:
#define FIELD_SIZE 8*sizeof(int) unsigned int bitfield[SIZE/FIELD_SIZE]; #define set_bit(i) bitfield[i/FIELD_SIZE] |= 1<<(i%FIELD_SIZE) //Bit setzen #define check_bit(i) bitfield[i/FIELD_SIZE] & 1<<(i%FIELD_SIZE) //Bit abfragen #define reset_bit(i) bitfield[i/FIELD_SIZE] &= ~(1<<(i%FIELD_SIZE)))//Bit löschen
-
fein. nur noch die 'geteilt' und 'modulus' weg machen und dann sieht's schon fast gut aus
-
Klar, das kann man auch durch Bit-Operatoren ersetzen, aber sowas sollte der Compiler doch selber herausoptimieren können (und lesbarer ist es auf jeden Fall)