Forum: Mikrocontroller und Digitale Elektronik Wiederholende Bitmuster


von Samuel (Gast)


Lesenswert?

Hallo, gibt es eine Möglichkeit,
ein Bitmuster zum Beispiel:
0b11110000
welches man in einem Ring immer um die Stelle x verschieben kann?

0b11110000 << 1 = 0b11100001
ob11110000 << 3 = 0b10000111
0b11110000 >> 1 = 0b01111000

von Stefan S. (sschultewolter)


Lesenswert?

Es handelt sich dabei um die zyklische Verschiebung.
1
// links
2
uint8_t x = 0b11110011;
3
x = (x<<7)|(x>>1);
4
5
// rechts
6
x = (x<<1)|(x>>7);

von Bernhard S. (b_spitzer)


Lesenswert?

Wenn der Controller Rotations-Befehle kennt (wie z.B. die 8051) oder 
einen Barrel-Shifter hat, wäre ein Blick in die intrins.h interessant. 
Beim 8051 werden die RL- und RR-ASM-Befehle in C über die Funktionen
1
unsigned char _cror_(unsigned char Value, unsigned char RotationNr);
2
unsigned char _crol_(unsigned char Value, unsigned char RotationNr);
aufgerufen. Allerdings verliert man dadurch die Portabilität des 
Programms auf andere Controller.
Mit etwas Glück hat der Compiler aber eine gute Optimierung (bzw. 
passende Peepholes) und setzt auch die zuletzt genannten C-Konstrukte in 
wenige ASM-Befehle für Rotation um.

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.