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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.