mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bitshift-Problem in C18


Autor: Meike Waldmann (meike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine kurze Frage. Es handelt sich hier um einen Pic18 und den 
C18 Compiler von Microchip.

Das hier war nur ein kleiner Versuch.

Warum funktioniert das hier:
        daten=0;
  for (j=0; j<7; j++)
  {
    daten |= (0x0001<<j);
  }
  daten |= 0b10000000;
  daten |= 0b100000000;

Ergebnis: daten = 0b0000 0001 1111 1111

aber das hier nicht?
        daten=0;
  for (j=0; j<9; j++)
  {
    daten |= (0x0001<<j);
  }

Ergebnis: daten = 0b1111 1111 1111 1111
Hier tritt das Problem schon ab dem 8. Bit auf darum habe ich das 8. und 
9. Bit oben extra behandelt.


Viele Grüße
Meike

Autor: Zwirbeljupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist "daten" denn definiert?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manche Compiler für µC erlauben 8-Bit Arithmetik ohne den 
standardkonformen formellen Umweg über 16-Bit auch dort, wo das Ergebnis 
abweicht. Je nachdem wie das im Compiler implementiert ist, wird er 1<<j 
bei j=8 vielleicht anders verstehen als Standard-C. Solches Verhalten 
sollte per Option abstellbar sein.

Autor: Meike Waldmann (meike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.