DDRD |= (1<<PD3) | (0<<PD4)

Gast #1185068
Kurz überlegen was das | und das & macht und die Frage kannst du dir 
selbst beantworten.
Falls das nicht klappt auf einem Blatt Papier die Bits aufmalen.
Gast #1186384
hmm und eine kleine antwort zum Thema war zu viel?
Ich habe es leider nicht so mit der Digitaltechnik bzw mit der bitweisen 
Verknüpfung. Vielleicht kann mir jemand sagen, ob das das gleiche ist, 
wie wenn man die Bits löscht...

mfg Karl
#1186387
karl wrote:
> hmm und eine kleine antwort zum Thema war zu viel?
> Ich habe es leider nicht so mit der Digitaltechnik bzw mit der bitweisen
> Verknüpfung.

das solltest du schleunigst ändern, sonst wirst du irgendwann ganz schön 
gegen die Wand laufen..

was macht wohl ein ODER mit einer NULL ?
Moderator Persönliche Seite #1186388
karl wrote:
> Vielleicht kann mir jemand sagen, ob das das gleiche ist,
> wie wenn man die Bits löscht...

Nachdenken kann trotzdem nicht schaden:
1
DDRX|= (0 << Pxx);
heißt ausgeschrieben
1
DDRX = DDRX | (0 << Pxx);
Nun kann man eine 0 um noch so viele Bits nach links schieben: es
bleibt eine 0.  Also ist es dasselbe wie
1
DDRX = DDRX;
Ergo: nein, es geht nicht.  Bits werden mit einer UND-Verknüpfung
gelöscht,
1
DDRX &= ~(1 << Pxx);
ist also einzig die korrekte Form.
#1186405
DDRX:
00000000 Anfangszustand

was macht "(1<<3)"?:
eine 1 um 3 Stellen schieben: aus 00000001 mach 00001000

was macht "|"?:
Bitweise ODER Verknüpfen:
00000000 = DDRX
00001000 = (1<<3)
--------
00001000 = Neuer Wert von DDRX

Jetzt das ganze rückwärts:
DDRX|= (0 << Pxx)
eine 0 um 3 Stellen schieben: aus 00000000 mach 00000000

ODER Verknüpfung:
00001000 = DDRX
00000000 = (0 << Pxx)
--------
00001000 = Neuer Wert (Ist gleich dem alten!) -> Nein man kann son keine 
Bits Löschen!

Statt dessen:
Damit die Anderen Bits bleiben wird folgendes gemacht:
in 11100011 soll das 2. Bit gelöscht werden:
~(1 << 1) macht ~(00000010) = 11111101
UND Verknüpfung:
11100011
11111101 Nur beim Zu löschenden Bit steht eine 0!
--------
11100001

Hintergrund, Boolsche Algebra, hier nötig:
1 UND 0=0 sowie 1 ODER 0 = 1

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.