Bitfelder



  • Hi,
    was kann man eigentlich mit bitfeldern machen?



  • bits auf 0 und 1 setzen 😃 spart Speicherplatz ist aber in der Regel ziemlich kompliziert anzusprechen.

    Die brauchst du eigentlich nur wenn du auf etwas programmierst wo Speicherplatz sehr teuer/knapp ist (batteriegepuffertes RAM zb), wenn du auf andere Geräte zugreifst die es halt so organisiert haben (sprich das und das bit auf 1 setzen um die LED einzuschalten) oder wenn du gerne Wutanfälle wärend des alltäglichen programmierens zum Abwechslung erlebst 😃 .

    Ok und für gaanz große boolarrays macht es auch Sinn weil du da nur 1 bit statt 8 bits pro bool benutzt.

    [ Dieser Beitrag wurde am 07.01.2003 um 16:09 Uhr von dreaddy editiert. ]



  • Ähm... knapp daneben. Bitfelder sind sowas hier:

    struct Foo {
      unsigned x: 2; /* belegt 2 Bits */
      unsigned y: 6; /* und wenn wir Glück haben packt der Compiler das alles in ein Byte */
    };
    

    Sie sind alles andere als kompliziert anzusprechen:

    Foo foo;
    foo.x = 1;
    

    Ob sie einen Sinn ausser der Speicherplatzersparnis haben ... keine Ahnung. Ich würde mal sagen, LEDs blinken mit Bitfeldern genauso gut oder schlecht wie ohne 😉



  • 😮 sowas könnt ich verdammt gut gebrauchen! hat mal einer genauere infos dazu? die sache mit dem "glück" macht mich doch ein bisschen stutzig 😉
    gibts da keine definitiven regeln?
    und: wie schnell ist das ganze? ist das zugriff auf ein bit-feld langsamer als bei einer normalen variable?



  • Mit kompliziert anzusprechen meinte ich hauptsächlich das ungewohnte Limit und wenn man mal einen zuwenig hat setzt der irgendwas oder schreibt der nicht über seine bits hinaus? hmm nochnie probiert... machich gleich mal 😉

    Und wenn du 8 LEDs in Reihe hast und deine dafür geschaffene Hardware sagt der Leuchststatus wird je in 8 aufeinanderfolgenden bits an einer festen Adresse gesetzt dann ist die beste Methode die anzusprechen immernoch

    struct LEDs
    { 
      unsigned erste : 1;
      unsigned zweite: 1;
      unsigned dritte: 1;
      unsigned vierte: 1;
      //..
    }
    
    LEDs* led_ansprechen = 0x234234;
    
    jetzt einfach ansprechen.erste = true;
    und eine LED fängt an zu leuchten....
    
    also ich meinte wenn du Hardwareadressen abdecken willst geht das super mit den Dingern, kommt bei win zum Glück nichtmehr allzuoft vor :P
    
    Und mit Glück meinte er das der Compiler unter Umständen mal nicht mitspielt und rum"optimiert"
    

Anmelden zum Antworten