Bitshift-Problem in C18

OP #1696488
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
#1696508
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.

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