jein ^^
du schiebst eine 0 um 2 stellen nach links ...
(0<<2) == 0b0000000_0_ -> 0b00000_0_00
da kannst du nullen schieben so viel wie du willst ^^
die operation die du suchst ist das negieren '~'
PortX = PortX & ~(1<<2)
~(1<<2) == 0b0000000_1_ -> 0b00000_1_00 -> 0b11111_0_111
EDIT: Nur nachträglich zur Erklärung, beim shiften wird der Inhalt der Variable (in dem Falle eine 0, die 8 Stück Nullbits entspricht) um die angegebene Zahl Stellen nach Links bzw. Rechts verschoben, und freiwerdende Stellen werden mit weiteren Nullen aufgefüllt (immer). Daher muss man um einzelne Bits aus einer anderen Zahl zu löschen, erst die entsprechenden Stellen über SHIFT und ODER Operationen auf 1 setzen und dann die ganze Zahl negieren und mit UND die Bits aus der Zielzahl so ausmaskieren.
Wenn ich mehrere Bits löschen will, sieht das dann so aus:
PortX &= ~( (1<<2) | (1<<4) | (1<<7) );
alternativ ginge auch
PortX &= ~(37<<2);
aber so verliert man schnell die Übersicht!
Lesezeichen