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; // 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ß.


Anmelden zum Antworten