Mal wieder: C, AVR und das Bitshiften

Gast #1980323
Lesenswert?
• ▲
▼
Sooo... ich hänge nun schon wieder seit knapp 2h an ner blöden Bitschift 
Operation und komme nicht weiter.


Er soll folgende 20Bit ausgeben:

1000 1000 1000 1000 1001

beim shiften fängt er aber leider von hinten an und gibt dieses aus:

1001 0001 0001 0001 0001

1
  unsigned long  mask = 1;
2
  unsigned long bitx =  0x88889;
3

4
  for(ki=0;ki<20;ki++)
5
  {
6

7
    clk = 0;
8
      if(bitx & mask) dat = 1; else dat = 0;
9
    clk = 1;
10
    mask <<= 1;
11
  }

Wo liegt der Denkfehler?!
Gast #1980336
Lesenswert?
• ▲
▼
Nimm mask auch als "Schleifenzähler":

  unsigned long  mask = 0x80000;
  unsigned long bitx =  0x88889;

  do{
    clk = 0;
      if(bitx & mask) dat = 1; else dat = 0;
    clk = 1;
    }
  while((mask >>= 1));


Nach 20 Durchläufen wird mask 0 (das Bit "fällt nach rechts heraus") und 
die Schleife endet.

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.