Mal ne Dumm-kluge-Frage ^^
-
Hallo
wie ihr wisst hatt der typ bool nur 2 werte: true oder false.Daraus schliese ich das es nur ein Bit verbraucht. Aber ihc weiss das nur ein Byte adressiert werden kann. Also wie wird denn das gelöst??? nimmt mein ein Byte und schreibt da nur Bool Typen rein und irgendwo steht die info das das 1. Bit die bool Variable bVar ist?? ODer wie darf ich mir das vorstellen ?MFg
-
Wenn du einen bool im Alleingang verwendest, nimmt er tatsächlich mehr Platz weg, als für die true/false-Information eigentlich nötig ist (wieviel, das kannst du mit sizeof() erfragen). Und dann steht 0 für false, 1 für wahr und alle übrigen möglichen Werte werden nicht verwendet.
Wenn du viele bool-Werte auf einen Haufen benötigst, kannst du sie in eine struct (mit Bitfeldern), ein bitset<> oder einen vector<bool> packen, dann werden sie dichtestmöglich im Speicher verstaut (und beim Zugriff werden Bit-Operatoren verwendet, um einen einzelnen bool zu greifen).
-
ok.. nur ich habe bool typen immer in einem Arry gespeichert wenn ich mehrer hatte. Ist das genauso effektiv wie deine Mthoden die du geschrieben hast?
-
bool boolarray[500];
ist deutlich ineffektiver in Sache n Speicher als ein bitset<500> oder ein vector<bool>.
Bei der Zugriffszeit müsste das Array eigentlich schneller sein...
-
gut naja ich bin eher der speicherfanatiker(naja eigentlich schnelligkeit ;p) aber bei bool wollte ich speicherfreundlich arbeiten. Gut... also zusammengefasst iste ein boolArray schneller aber verbraucht mehr speicher (weil er warscheinlich keine "inteligenz" hat). Vector und bitset sind langsamer aber speichereffektiver (weil sie warscheinlich "inteligenter sind"). Also kann ich mit vectoren arbeiten weil ich mit bitsets noch kein plan habe. UNd ich kann warscheinlich auch die ganzen Vector Methoden verwenden.
-
Hi !
Du könntest dir auch deine eigenen Bool Variablen bauen.
Ich knappse auch gern mit dem Speicher, darum programmiere ich auch lieber in C
Aber wie auch immer. Die selbstgebaute Variante, bei der 8 boolsche Variable nur ein Byte verbrauchen, könnte so aussehen:
unsigned char bool8 = 0; // "Array" mit acht boolschen "Variablen" // Alle acht Variablen nacheinander auf 1 setzen bool8 &= 1; // 0x01 bool8 &= 2; // 0x02 bool8 &= 4; // 0x04 bool8 &= 8; // 0x08 bool8 &= 16; // 0x10 bool8 &= 32; // 0x20 bool8 &= 64; // 0x40 bool8 &= 128; // 0x80 // Die dritte Variable im Array abfragen und unverändert lassen. if ( bool8 & 4 ) // ....
-
@Individuum:
Ich würde die Bits allerdings nicht mit AND setzen :p
-
Oje, böses Foul !
Die Initialisierung mit 1 müsste natürlich so aussehen:
bool8 |= 1; // 0x01
bool8 |= 2; // 0x02
bool8 |= 4; // 0x04
bool8 |= 8; // 0x08
bool8 |= 16; // 0x10
bool8 |= 32; // 0x20
bool8 |= 64; // 0x40
bool8 |= 128; // 0x80Ich Dusselchen

-
LordJaxom schrieb:
@Individuum:
Ich würde die Bits allerdings nicht mit AND setzen :pDas ist richtig, ich auch nicht.
Man könnte natürlich gleich
bool8 = -1;schreiben und würde so gleich alle 8 Bits auf 1 setzen.
Wollte bloss mal das setzen einzelner Bits 'demonstrieren'.

-
Genau, oder:
bool8 = ( 1 << CHAR_BIT * sizeof( unsigned char ) ) - 1;Oder:
bool8 = std::numeric_limits< unsigned char >::max();Oder:
bool8 = UCHAR_MAX;
-
Oder:
template< typename Type, std::size_t N = std::numeric_limits< Type >::digits > struct set_bits { static const Type value = ( set_bits< Type, N - 1 >::value << 1 ) | 1; }; template< typename Type > struct set_bits< Type, 0 > { static const Type value = 0; }; /* ... */ bool8 = set_bits< bool8 >::value;*scnr*
-
wie wärs ganz unkonventionell mit
unsigned char bool8 = 0xFF;?
-
Tja, und was machst du, wenn ich ein 16-Bit unsigned char habe?
-
.filmor schrieb:
Tja, und was machst du, wenn ich ein 16-Bit unsigned char habe?
was dann? ist doch egal, wie die 8 ungenutzten bits gesetzt sind

-
Dann gibts ein paar hinter die Löffel weil du dein unsigend char bool8 genannt hast...

-
zeigerzeiger schrieb:
Dann gibts ein paar hinter die Löffel weil du dein unsigend char bool8 genannt hast...

und das oben drauf!
-
.filmor schrieb:
Tja, und was machst du, wenn ich ein 16-Bit unsigned char habe?
Das wird es wohl nie geben.
-
staun schrieb:
.filmor schrieb:
Tja, und was machst du, wenn ich ein 16-Bit unsigned char habe?
Das wird es wohl nie geben.
Sagt wer?
16-Bit Bytes ftw!
-
staun schrieb:
.filmor schrieb:
Tja, und was machst du, wenn ich ein 16-Bit unsigned char habe?
Das wird es wohl nie geben.
Aber natürlich!
Es spricht auch nichts gegen 32 oder 64 Bit chars. Oder vllt sogar 128? Alles möglich! 
-
uniforme sprachen, die nur noch einen typ haben: VAR, 1024 bit groß.
-
.filmor schrieb:
staun schrieb:
.filmor schrieb:
Tja, und was machst du, wenn ich ein 16-Bit unsigned char habe?
Das wird es wohl nie geben.
Sagt wer?
16-Bit Bytes ftw!ich !
stell dir vor, die ganzen funktionen in bibliotheken ( Ansi C, C++ )
alle lesen z.B. Dateien byteweise ein ( das ist ein unsigned char )und auf einmal würde das 16Bit werden ! was für ein chaos entstehen würde !
16-Bit Bytes ftw ? humbug !
staun for president !