MYuint5 : wie machen?

OP #2648087
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?
#2648305
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?
Gast #2648541
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.
#2648713
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.