Hallo, im AVR-Studio in C möchte ich gerne eine 8-Bitvariable um genau 1 nach links schieben, also dass z.B. die Binärzahl 10000010 zu 00000101 wird. Das macht man sicher irgendwie mit "<<"! Eventuell so, wenn man den Inhalt eines Ports um 1 verschieben will? PORTA |= ( 1 << PORTA ); Gibt es irgendwo auf dieser Seite hier einen Artikel zu Bitmanipulationen?
> eine 8-Bitvariable um genau 1 nach links schieben, also dass z.B. die > Binärzahl 10000010 zu 00000101 wird. Das ist nicht Schieben sondern Rotieren und das gibts nicht nativ in C. Kann man aber leicht aus zweimaligem Schieben und ein bisschen verodern hinsimulieren.
Man könnte die Variable in 16Bit umwandeln und mit 2 multiplizieren und gucken, ob sie größer als 255 ist. Wenn ja, wird eine 1 addiert, sonst nicht. Danach wird die Variable wieder in 8Bit umgewandelt (also das HB abgeschnitten). So müsste es gehen... :O)
Dkl schrieb: > Man könnte die Variable in 16Bit umwandeln und mit 2 multiplizieren und > gucken, ob sie größer als 255 ist. Wenn ja, wird eine 1 addiert, sonst > nicht. > Danach wird die Variable wieder in 8Bit umgewandelt (also das HB > abgeschnitten). > > So müsste es gehen... :O) Ja. Oder so:
1 | unsigned char temp = PORTA; |
2 | unsigned char bit0 = !!(temp & (1 << 7)); |
3 | temp <<= 1; |
4 | temp |= bit0; |
5 | PORTA = temp; |
mfg.
:
Bearbeitet durch User
Oder so:
1 | signed char temp = PORTA; |
2 | PORTA = temp<<1 | temp<0; |
LG, Sebastian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.