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 (784 Punkte)