Das Elektor-Forum schließt seine Pforten (siehe auch http://www.elektormagazine.de/forum). Ab Freitag, den 15. März, ist es nicht mehr möglich, sich im Forum einzuloggen. Alle Inhalte des Forums bleiben jedoch bis Ende März noch sichtbar. Am 01. April wird das Forum schließlich komplett geschlossen.

Abarbeitung eines C Programmes

Postby fiesicus » Wed May 19, 2010 12:00 am

Hallo

Im Lehrbrief 3 (5.3 Das eigene Voltmeter) wird ein Programm zum erfassen von Analogwerten erklärt (adw_vm.c). Auf Seite 105 unten wird der Zusammenbau der beiden Registerinhalte beschrieben wert = ((ADDH << 2) + (ADDL & 0x03));

Jetzt die Frage:

Wird das Programm hinter dem = von links nach rechts abgearbeitet also erst ADDH und dann ADDL (ich denke schon oder?). Und gibt es noch weitere allgemeine Regeln zur Abarbeitung außer das die Klammern zuerst behandelt werden ?
fiesicus
 
Posts: 20
Joined: Fri Jan 03, 2014 2:01 pm

Postby noxzor » Fri May 21, 2010 12:00 am

Die Abarbeitung eines Rechenterms hängt von den verwendeten Operatoren ab. Diese haben alle eine festgelegte Prioritätsstufe, die die Reihenfolge der Abarbeitung bestimmt (Operationen mit höherer Priorität werden zuerst ausgeführt). Eine Übersicht findest du hier: http://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorit%C3%A4t

Demzufolge haben die Operanden in deinem Term folgende Prioritätsstufen
= 2
& 8
<< 11
+ 12
() 15

Hättest du also die Klammern weggelassen und nur folgendes geschrieben:
wert = ADDH << 2 + ADDL & 0x03; 

Würde folgendes gerechnet werden:
temp = 2 + ADDL
temp2 = ADDH << temp
wert = temp2 & 0x03

Aus den Priorisierungsstufen ergibt sich auch das die äußere Klammer in deinem Term überflüssig ist, da "+" (Prio 12) vor "=" (Prio 2)abgearbeitet wird.
noxzor
 
Posts: 2
Joined: Fri Jan 03, 2014 2:13 pm


Return to Mikrocontroller-Fernlehrgang (TFH)

Who is online

Users browsing this forum: No registered users and 1 guest