Mal ne Dumm-kluge-Frage ^^
-
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 !
-
Wenn die ganze Plattform 16bit-Bytes hat, ist auch die kleinste adressierbare Einheit in einer Datei ein 16bit-Byte. Keine Probleme hier. Dass man mit einer solchen Plattform beim Datenaustausch mit anderen Plattformen aufpassen muss, steht auf einem anderen Blatt.
Der C(++)-Standard definiert übrigens tatsächlich nicht explizit, dass ein char (== die kleinste adressierbare Einheit) 8bit haben muss.
-
LordJaxom schrieb:
Wenn die ganze Plattform 16bit-Bytes hat, ist auch die kleinste adressierbare Einheit in einer Datei ein 16bit-Byte. Keine Probleme hier. Dass man mit einer solchen Plattform beim Datenaustausch mit anderen Plattformen aufpassen muss, steht auf einem anderen Blatt.
Der C(++)-Standard definiert übrigens tatsächlich nicht explizit, dass ein char (== die kleinste adressierbare Einheit) 8bit haben muss.
Eben, wenn. Die Betonung liegt ganz auf wenn. Irgendwie völlig an der Praxis vorbei, nicht wahr.