"unsigned int" und bit-Felder



  • Guten Morgen Gemeinde 🙂

    Und zwar folgendes, ich möchte eine Struktur mit 4 Byte , definiert durch bit-Felder definieren
    Bspw::

    typedef struct status2
    {
        unsigned int m_A : 16;
        unsigned int m_B : 8;   
        unsigned int m_C : 8;    
    } status2;
    

    Laut Google, gibt der Standard vor, dass " unsigned int " für bit-Felder bevorzugt werden soll, da dies die "meisten" Compiler unterstützen.

    ABER unsigned int ist ja wieder je nachm Plafrom unterscheidlich groß. Für meine Struktur welche 4byte benötige reicht das auf einem 32bi System ja aus. Wie wird da auf nem 64Bit system umgegangen, ist das unsigend int nicht 8 byte groß?

    bzw. ist unsigned int NUR auf 16 bit sytemen != 32 bit!?

    Danke schonmal



  • @SoIntMan Vorweg, ich habe das noch nicht benutzt, aber, wenn ich das richtig verstehe, gibst du explizit die Größe an. Also, solange du kein Bitfeld > 32 bit benötigst, sollte das kein Problem sein, egal ob int 32 oder 64 bit groß ist.
    Wenn jetzt ein Wert mindestens 32 bit benötigt, ist ein Bitfeld warscheinlich eh die falsche Datenstruktur.

    P.S. als ich angefangen habe zu tippen, bin ich erstmal von C++ ausgegange, hab das ein bisschen angepasst und hoffe, das ich nicht komplett daneben liege. Plain C brauche ich einfach viel zu selten.



  • Dieser Beitrag wurde gelöscht!


  • Das hängt von der jeweiligen Plattform ab. Wenn Du feste Bitbreiten willst, solltest Du Dir die Typen mit fester Bitbreite anschauen zB. uint32_t. Die werden als typedef in stdint.h definiert.



  • @Schlangenmensch sagte in "unsigned int" und bit-Felder:

    @SoIntMan Vorweg, ich habe das noch nicht benutzt, aber, wenn ich das richtig verstehe, gibst du explizit die Größe an. Also, solange du kein Bitfeld > 32 bit benötigst, sollte das kein Problem sein, egal ob int 32 oder 64 bit groß ist.
    Wenn jetzt ein Wert mindestens 32 bit benötigt, ist ein Bitfeld warscheinlich eh die falsche Datenstruktur.
    P.S. als ich angefangen habe zu tippen, bin ich erstmal von C++ ausgegange, hab das ein bisschen angepasst und hoffe, das ich nicht komplett daneben liege. Plain C brauche ich einfach viel zu selten.

    ja ich denke ich verabschiede mich von bitfeldern, muss nicht unbedingt sein;)

    @john-0 sagte in "unsigned int" und bit-Felder:

    Das hängt von der jeweiligen Plattform ab. Wenn Du feste Bitbreiten willst, solltest Du Dir die Typen mit fester Bitbreite anschauen zB. uint32_t. Die werden als typedef in stdint.h definiert.

    ja eben die Plattform Geschichte hemmt mich .. deswegen mache ich es jettzt ohne
    ..

    Danke für euere Antworten;)


Anmelden zum Antworten