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;
}