Bit ARRAY?



  • Hallo Leute,

    ich kann ja Bitfelder anlegen:

    unsigned int iFourBits : 4;
    unsigned int iSevenBits : 7;
    

    etc.

    kann ich auch ein Array von bspw. 80 bits anlegen? Denk nich.. muss das über bytes etc. aufschlüsseln.. grüße



  • ja.

    char _80Bit [10];
    

    🙂



  • so:

    struct bit
    {
      unsigned the_bit :1; 
    } _80bits[80];
    

    aber gib mal sizeof(_80bits) aus. das ergebnis wird dich nicht erfreuen.
    🙂



  • ja ic hweis, sizeof wir das nich das ergebniss liefern was man erwartet immer auf das ganze byte halt...

    naja dann werd ich die bits durch ganze bytes teilen;)


  • Mod

    BorisDieKlinge schrieb:

    kann ich auch ein Array von bspw. 80 bits anlegen?

    Nur wenn der zugrunde liegende Typ wenigstens 80 bits hat. Etwas anderes wäre auch nicht sinnvoll: selbst wenn du entsprechend größere Bitfelder deklarieren könntest, wären diese zusätzlichen bits nicht nutzbar, da bei Schreiben in das bitfeld der zu schreibende Wert ja den entsprechenden zugrundeliegnden Typ hat bzw. in diesen konvertiert wird. Umgekehrt hat ein Bitfeld in einem Ausdruck den zugrundeliegenden Typ, wäre ein Bitfeld größer als dieser Typ, müsste hier ebenfalls Information verloren gehen. Zudem gibt es keine Möglichkeit, direkt auf diese zusätzlichen bits zuzugreifen, denn Bitfelder sind nicht adressierbar.



  • Dazu sage ich nur FAT12.
    Wer sich das ausgedacht hat, mit dieser bit-pfriemelei 😡



  • wurst schrieb:

    Dazu sage ich nur FAT12.
    Wer sich das ausgedacht hat, mit dieser bit-pfriemelei 😡

    Damals war Speicherplatz noch sehr wertvoll.
    Aber zum Thema: Zugriff auf einzelne Bits ist unter C relativ einfach durch Schiebe- und Logikoperatoren. IMHO muß man sich nicht mit Bitfeldern herumquälen.



  • jepp ich speicher meien bits in bytes, get'e set'e sie so

    #define SET_BIT(byte,bit) (byte |= (1<<bit))
    #define GET_BIT(byte,bit) (1 & (byte>>bit))
    

Log in to reply