lima-city: Webhosting, Domains und Cloud
2 Pluspunkte 0 Minuspunkte

Ich habe diese Liste gefunden wo die Werte für signed int aufgeführt sind.

bits  value
0000    0
0001    1
0010    2
0011    3
0100    4
0101    5
0110    6
0111    7
1000   -8
1001   -7
1010   -6
1011   -5
1100   -4
1101   -3
1110   -2
1111   -1

Ich wollte es testen und habe dazu diesen Code geschrieben.

int main()
{
    signed int i = 0b1000;   
    printf("%d", i); // Ausgabe 8
    return 0;
}

Sollte laut der Tabelle nicht -8 rauskommen?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Das liegt daran, dass du eine vorzeichenbehaftete Ganzzahl (32 Bit) verwendest und in der Darstellung entspricht 1000 tatsächlich der Dezimalzahl 8. 

0b00000000.00000000.00000000.00001000

Du müsstest die ganzen 32 Bit angeben. 

0b10000000.00000000.00000000.00001000
  ^

Wenn du sicherstellen möchtest, dass du nur 4 Bits verwendest, könntest du stattdessen einen eigenen Datentyp definieren oder Bitmasken verwenden.

typedef struct {

    signed int val:4;
    
} FourBitInt;

int main() {

    FourBitInt i;
    i.val = 0b1000; // -8 in 4-Bit signed Darstellung
    
    printf("%d", i.val); // Ausgabe: -8
    
    return 0;
    
}
von (716 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Beiträge bewerten
  • Inhalte bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft. Unser Ziel: Guter Inhalt. Für alle.

2.3k Fragen

2.8k Antworten

260 Kommentare

12 Nutzer