- Labornetzteil AliExpress         
Ergebnis 1 bis 7 von 7

Thema: Integer mit einem Bit ?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Bei einem Bitfeld bedeutet "int" NICHT automatisch "signed".
    Ob bei einem Bitfeld ein "int" "signed" oder "unsigned" ist, ist "implementation-defined", wird also vom Compiler festgelegt. Und offenbar ist es bei dem von dir verwendeten Compiler "unsigned", denn sonst würde er ja auch bei "int dat3 : 1;" eine Warnung bringen.
    Geändert von sternst (19.11.2011 um 00:00 Uhr)
    MfG
    Stefan

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Guten Morgen Sternst und die anderen...
    Um deine Aussage zu prüfen, habe ich gleich mal folgendes probiert:

    Code:
    struct
    {
      int          dat1 : 3;
      signed int   dat2 : 3;
    } st;
    
    int main(void)
    { int a;
      
      st.dat1 = -3;
      st.dat2 = -3;
       
      a = st.dat1;   /* a ist nun +5 !!!!!!!!! */
      a = st.dat2;   /* a ist nun -3 */  
    
    }
    Und siehe da, Du hast vollkommen recht, der (mein) Compiler interpretiert bei Bit Definitionen den int tatsächlich "vorzeichenlos".
    Dann ist also meine Frage garnicht so dumm gewsesen. Bei Bitdefinitionen ist es also sehr wohl erlaubt (bzw.) sogar Pflicht
    dem int ein Vorzeichen aufzudrängeln, sonst verhält sich der Code unter Umständen nicht wie vorgesehen
    .
    Ich hab den Satz mal fett gemacht, ich glaube das ist eine ganz wichtige Aussage.
    Ich danke Dir, für die Info.
    Siro
    Geändert von Siro (19.11.2011 um 08:38 Uhr)

  3. #3
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Zitat Zitat von Siro Beitrag anzeigen
    Bei Bitdefinitionen ist es also sehr wohl erlaubt (bzw.) sogar Pflicht
    dem int ein Vorzeichen aufzudrängeln, sonst verhält sich der Code unter Umständen nicht wie vorgesehen
    .
    Ich hab den Satz mal fett gemacht, ich glaube das ist eine ganz wichtige Aussage.

    Damit die Aussage für jemanden von Nutzen ist, müsstest du aber noch den Namen des verwendeten Compilers nennen
    Mit bestem Gruß
    Frank

    Admin Roboternetz.de - RN-Wissen.de - Elektronik-Blog
    Überzeugter und begeisterter Elektroauto Fahrer seit 2018

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo Frank,
    hast recht, der Vollständigkeit halber:

    Der C-Compiler von IAR Embedded Workbench

    interpretiert einen int bei Bitdefinitionen vorzeichenlos.

    Möchte man eine Bitkombination mit Vorzeichen haben, muss man einen

    signed int benutzen.

    Eine offizelle Bestätigung habe ich heute von IAR erhalten mit einem Verweis auf die Online Dokumentation des C++ Compilers, Seite 290
    Den Ausschnitt habe ich mal angehangen. Zudem gibt es eine #pragma bitfield directive, mit der man unter anderem die Bit Reihenfolge einstellen kann LSB / MSB first usw.

    Siro
    Geändert von Siro (23.11.2011 um 07:56 Uhr)

Ähnliche Themen

  1. Word in Integer?...
    Von Karlja im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 10.08.2010, 18:23
  2. 16Bit Integer in 2 8Bit integer
    Von PcVirus im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 29.02.2008, 16:57
  3. integer abschneiden???
    Von MarkusH im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 13.03.2007, 18:17
  4. double to integer oder exp(x) mit integer
    Von fambi_mail im Forum C - Programmierung (GCC u.a.)
    Antworten: 21
    Letzter Beitrag: 02.03.2006, 11:14
  5. Integer in Byte
    Von _Alex im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 03.02.2006, 06:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress