Bit schieben (Links-Shift)

Gast #3359884
Lesenswert?

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?
Gast #3359891
Lesenswert?

> 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.
Gast #3359924
Lesenswert?

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)
#3360007
Lesenswert?

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.

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