Bitarray shiften / Problem

Gast #1306787
Lesenswert?

Hallo,

ich habe einen 16Bit-Parameter, der so aufgebaut ist:

1101 100a aabb bbcc

Um nun besser experimentieren zu können, habe ich folgende Definitionen 
eingeführt:

#define Param_a 110
#define Param_b 0001
#define Param_c 01
#define Param (0b1101100000000000 | (Param_a << 8) | (Param_b << 5) | 
(Param_c << 1))

Das Problem, das ich nun habe, ist, dass der Compiler die Parameter, die 
nicht mit einer 1 beginnen, natürlich "verkürzt". Aus "0001" wird "1" 
und damit passt der Shift nach links natürlich nicht mehr.

Wie kann ich also meine Teil-Bitfelder richtig shiften? Überall eine 1 
davor und die dann abschneiden ist ja auch nicht die eleganteste 
Lösung...

Vielen Dank im voraus!

Sebastian
Gast #1306791
Lesenswert?

Hmmm irgendwie ist das letzte #define doch irgendwie komisch bzw. ich 
weiss nicht was du machen willst...

0b 1101 1000 0000 0000

Ich behaupt mal, wenn du jetzt aus dem Parameter die "ersten" 3 Bit 
ausmaskieren willst, dann veroder das mit : (Param_a << 13)
Für das 4te Bit shiftest du dann halt : (Param_b << 12) und veroderst.

So müsste das ausmaskieren klappen...ansonsten bissle probieren...
Gast #1306817
Lesenswert?

Hallo,

vielen Dank zuerst einmal für die schnellen Antworten!

Falk hat vollkommen recht, ich habe mich oberen statt unteren Bit 
orientiert, schön blöde... nun funktioniert alles einwandfrei!

Sven, Du hast auch recht, es muss natürlich

#define Param_a 0b110
#define Param_b 0b0001
#define Param_c 0b01

heißen. Das hatte ich aber schon richtig, hier aber falsch gepostet...

Viele Grüße und nochmals vielen Dank! :-)

Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren