-         
Ergebnis 1 bis 5 von 5

Thema: C Newbee Fragen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2010
    Ort
    Düsseldorf
    Beiträge
    24

    C Newbee Fragen

    Anzeige

    Hallo Zusammen,

    bin bei meinen ersten Gehversuchen in C. Es soll dabei ein Schalter realisiert werden, der die LED an/aus schaltet (quasi der Klassiker).

    Meine Frage, sind die unten stehenden Codepärchen jeweils gleichbedeutend (mit gleicher Wirkung) oder werden unterschiedliche Werte ausgegeben? Mein Verständnis der Binärwerte steht jeweils darunter:

    PORTC &= ~(1<<5)
    PORTC &= (0<<5)
    xxxxxxxx
    and 11011111
    = xx0xxxxx


    PORTC & 1<<5
    PORTC & (1<<5)
    xx1xxxxx
    = wahr/falsch


    !(PIND & 1<<2)
    PIND & (0<<2)
    nicht xxxxx1xx oder xxxxx0xx
    = wahr/falsch

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    27
    Beiträge
    522
    Hallo Lightstorm!

    PORTC &= ~(1<<5)
    PORTC &= (0<<5)
    (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 & (1<<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 )

    !(PIND & 1<<2)
    PIND & (0<<2)
    Analog zum ersten Paar gilt auch hier, dass (0<<2) = 0, weshalb der zweite ausdruck immer false ist.

    MfG Mark

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2010
    Ort
    Düsseldorf
    Beiträge
    24
    Herzlichen Dank - das hat mir in meinem Verständnis weiter geholfen. Die Idee mit dem Verschieben hab ich noch nicht ganz durchgestiegen, deine Erklärung bringt mich dem aber etwas näher.

    Danke

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Lightstorm
    Die Idee mit dem Verschieben hab ich noch nicht ganz durchgestiegen
    a<<b:
    a ist der Ausgangswert und b die Anzahl der Stellen, um die der ganze Wert nach links geschoben wird, wobei rechts Nullen nachrücken.

    1<<3:
    Ausgangswert ist 1, also 00000001
    3 Stellen nach links geschoben ist 00001000

    0<<3:
    Ausgangswert ist 0, also 00000000
    3 Stellen nach links geschoben ist 00000000

    13<<3:
    Ausgangswert ist 13, also 00001101
    3 Stellen nach links geschoben ist 01101000
    MfG
    Stefan

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2010
    Ort
    Düsseldorf
    Beiträge
    24
    Jetzt sollte es geklärt sein. Dass die Null (0<<3) so eigentlich kein Sinn macht, war mir so nicht klar.

    Gibt es auch eine Variante, an der statt 0er, 1er nachrücken?

    Danke für die Hilfe...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •