Forum: Mikrocontroller und Digitale Elektronik Bitshift-Problem in C18


von Meike W. (meike)


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:
1
        daten=0;
2
  for (j=0; j<7; j++)
3
  {
4
    daten |= (0x0001<<j);
5
  }
6
  daten |= 0b10000000;
7
  daten |= 0b100000000;
8
9
Ergebnis: daten = 0b0000 0001 1111 1111

aber das hier nicht?
1
        daten=0;
2
  for (j=0; j<9; j++)
3
  {
4
    daten |= (0x0001<<j);
5
  }
6
7
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

von Zwirbeljupp (Gast)


Lesenswert?

Wie ist "daten" denn definiert?

von (prx) A. K. (prx)


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.

von Meike W. (meike)


Lesenswert?

Danke für eure Antworten :)

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
Noch kein Account? Hier anmelden.