Mal ne Dumm-kluge-Frage ^^
-
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.
-
Ein char muss nur die kleinste Einheit sein sizeof( char ) = 1 (immer). Aber wieviel Bit ein char hat ist nicht festgelegt. Drum gibts auch eine Konstante CHAR_BIT die die Anzahl der Bits eines chars angibt. Und ja, ein char kann 16, 32, 64, 128, oder sonst irgendeine Bitzahl haben.
staun schrieb:
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.
Unsinn...
Noch ein Link zum Thema: http://www.parashift.com/c++-faq-lite/intrinsic-types.html
-
staun schrieb:
Eben, wenn. Die Betonung liegt ganz auf wenn.
Eben, wenn. Nicht falls.
