Heiopei schrieb:
> Da n unsigned char ist, sollten doch links nullen nachgeschoben werden?!
Diese Begründung ist nicht richtig. Mit n hat das nix zu tun, da n gar
nicht geschoben wird.
Jetzt fragt sich, ob der Kompiler aus den 8Bit bei der Komplementierung
von PIND einen Integer macht. Der wäre auf dem AVR 16 bit breit. Dann
wird bei
PIND = 0b01010101
das Ergebnis von ~PIND auf 16 Bit aufgebohrt, also:
~PIND : 0b1111111110101010
Wenn man das nach rechts schiebt um 4 Stellen, dann wird daraus:
(~PIND) >> 4: 0b1111111111111010
Oben schieben sich bei negativen Zahlen (2er Komplement) 1en rein[1],
spielt hier aber keine Rolle, denn es werden nur die untersten 8 Bit im
n gespeichert. Dann sieht n so aus:
n: 0b11111010
Wohlgemerkt, alles nur, wenn der Compiler das Ergebnis von ~PIND auf 16
Bit (= Integer auf z.B. ATmega8) aufbohrt. Um welchen Compiler/Prozessor
handelt es sich denn?
Gruß,
Frank
[1] Vielleicht wird aus ~PIND auch ein unsigned int, dann kommen halt 4
0en von oben rein. Nützt Dir aber auch nix. Du hast immer noch 4 Einsen
vor Deinem Wert.