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; // 0x80

    Ich Dusselchen 🙂



  • LordJaxom schrieb:

    @Individuum:
    Ich würde die Bits allerdings nicht mit AND setzen :p

    Das 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. 😃


Anmelden zum Antworten