Forum: Compiler & IDEs MYuint5 : wie machen?


von Olpo O. (olpo)


Lesenswert?

Hallo,

ich habe ein 5 Bit großes Datenfeld und würde das gerne in einer 
Struktur speichern.
1
struct abc{
2
    MYuint5 tag;
3
    char c;
4
};

Die Frage ist jetzt, wie baue ich mir ein MYuint5, das 5 Bit groß ist?

Ich kenne mich da nicht so aus.
Oder muss ich uint8 nehmen? Und wenn ich uint8 nehmen muss, kann man 
dann ein Makro schreiben, dass die ersten 3 Bit immer 0 setzt?

von Klaus W. (mfgkw)


Lesenswert?

Man kann mit einem Bitfeld angeben, daß man nur 5 Bit haben möchte:
1
struct abc{
2
    unsigned tag:5;
3
    char c;
4
};
Dann werden die restlichen Bits von zumindest 8 nicht genutzt.

olpo olpo schrieb:
> Und wenn ich uint8 nehmen muss, kann man
> dann ein Makro schreiben, dass die ersten 3 Bit immer 0 setzt?

Das wird in der Regel nicht nötig sein.
ozu soll das gut sein?

von Rolf Magnus (Gast)


Lesenswert?

olpo olpo schrieb:
> Die Frage ist jetzt, wie baue ich mir ein MYuint5, das 5 Bit groß ist?
>
> Ich kenne mich da nicht so aus.
> Oder muss ich uint8 nehmen? Und wenn ich uint8 nehmen muss, kann man
> dann ein Makro schreiben, dass die ersten 3 Bit immer 0 setzt?

Das klingt, als sei deine eigentliche Anforderung ein Typ, der bei 
Werten größer 31 überläuft. Oder warum ist es sonst so wichtig, daß der 
Typ exakt 5 Bit breit ist?
Man kann sich natürlich ein Makro schreiben:
1
#define SCHNIPPEL_5BIT(x) ((x) & 0x1F)
aber das wirst du dann immer von Hand aufrufen müssen. Die Lösung von 
Klaus geht, kann aber natürlich auch nicht zaubern und wird bei jeder 
Berechnung einen gewissen Overhead bringen. Dafür geht die Begrenzung 
auf 5 Bit automatisch.

von Peter D. (peda)


Lesenswert?

olpo olpo schrieb:
> Die Frage ist jetzt, wie baue ich mir ein MYuint5, das 5 Bit groß ist?

Die spannendere Frage ist, warum?
Erzähl dochmal, wozu Du das zu brauchen denkst.

In der Regel stören 3 ungenutzte Bits im SRAM nicht. Dafür erspart man 
dem Compiler aber ne Menge umständlichen Code zu erzeugen, spart also 
richtig Flash und CPU-Zeit.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.