Hallo Lightstorm!
(0<<5) ist 0, weil eine 0 um 5 Bit nach links verschoben immer noch eine 0 bleibt. ~(1<<5) ist hingegen 11011111, weil dort eine 1 um 5 Stellen nach links verschoben wird (00100000) und dann duch das ~ invertiert wird. Deshalb sind die beiden Zeilen nicht gleichbedeutend, im zweiten Ausdruck PORTC mit 0 verUNDet, also auf 0 gesetzt wird.PORTC &= ~(1<<5)
PORTC &= (0<<5)
Diese beiden Zeilen sind gleichbedeutend, da der << Operator eine höhere Priorität hat als das & . Allerdings würd ich die Klammern trotzdem da lassen, weil es den Lesefluss erleichtert und man nicht voraussetzen darf, dass jeder die Prioritäten kennt (ich musste auch erstmal nachgucken )PORTC & 1<<5
PORTC & (1<<5)
Analog zum ersten Paar gilt auch hier, dass (0<<2) = 0, weshalb der zweite ausdruck immer false ist.!(PIND & 1<<2)
PIND & (0<<2)
MfG Mark
Lesezeichen