Operatorenreihenfolge
-
Hallo Leute
entspricht das:
address = (Uint8 *)&ptCommand->usFirstDataWordToGetAddress+ucTmp;
dem
address = ((Uint8 *)&ptCommand->usFirstDataWordToGetAddress)+ucTmp;
?
MfG
-
Kuckst du hier:
#include <stdint.h> #include <stdio.h> int main(void) { uint32_t x=(uint8_t)(251+5); printf("%i\n",x); return 0; }
Diser Ausdruck rechnet 251+5, also 256, konvertiert das nach 256, dafür hast du aber keinen Platz in einem 1-Byte-Wert, und es kommt 0 raus.
Wenn du allerdings:
uint32_t x=(uint8_t)251+5;
Machst, wird 251 in einen 1-Byte-Wert umgewandelt, und dann erst +5 gerechnet. 5 ist ein Integerliteral, normalerweise mit 4 Byte kodiert, und der C-Standard garantiert bei impliziter Konvertierung, dass auf den höheren von zwei Typen umgewandelt wird. Das Ergebnis ist dann 256 in einem int, dafür ist genug Platz, und die Ausgabe ist dann auch 256.
-
das geht denke ich an meiner FRage vorbei
Ich meine wenn ich auf die Addresse eines unsigned short eines byte mit dem Wert 1 drauf addiere rechnet der ja + 2.
Er soll aber nur +1 Rechnen deswegen der cast. Macht der das auch ohne Klammer?
MfG
-
Probiere es aus!
+ und der Cast haben den gleichen Rang, deshalb vermute ich, dass es einfach von links nach rechts geht, Antwort auf Deine Frage wäre also: Ja
-
Ach, verdammt, habe das Sternchen nicht bemerkt.
Die Klammern kannst du weglassen:
uint32_t y=0x0102; uint8_t*x=(uint8_t*)&y+1; printf("%i\n",*x); return 0;
Produziert das gleiche Ergebnis wie:
uint32_t y=0x0102; uint8_t*x=((uint8_t*)&y)+1; printf("%i\n",*x); return 0;
Die Konvertierung tritt immer vor der eigentlichen Operation auf.
-
Belli schrieb:
+ und der Cast haben den gleichen Rang
Nein, wie kommst du denn darauf? Wahrscheinlich hast du es mit dem unären + verwechselt. Der Cast hat jedenfalls eine wesentlich höhere Priorität als das binäre +.
-
also ich habe ja auch vorher nachgekuckt und der cast hat eine Höhere Priorität als das +
aber irgendwie ist nachdem ich das dort geklammert habe im Code Composer Studio von TI ist die Software noch nicht wieder abgestürzt. Sonst war genau das passiert innerhalb von 2 Stunden einmal weil es ja dann eine Speicherverletzung gibt.
MfG
-
Bashar schrieb:
Belli schrieb:
+ und der Cast haben den gleichen Rang
Nein, wie kommst du denn darauf? Wahrscheinlich hast du es mit dem unären + verwechselt.
Asche auf mein Haupt, so ist es ...
-
wo finde ich das?
habt ihr nen Link?
Wenn die wirklich die selbe Priorität haben, dann kann das ja bei jedem compiler unterschiedlich sein.
MfG
-
Destiniy schrieb:
Wenn die wirklich die selbe Priorität haben, dann kann das ja bei jedem compiler unterschiedlich sein.
MfG
Nein, dafür gibt es dann die Assoziativität.
-
Link!
Und Operatorenreihenfolge wird vom Standard garantiert.
-
da steht aber addition und subtraktion bei priorität 4.
(@dachschaden ich hatte das schon gegoogled bin aber zu einem anderen ergebnis gekommen)Was bedeutet Unary plus and minus?
Wo steht dann was bei gleicher Priorität vorgeht?
MfG
-
dann gibt es auch noch sich wiedersprechende Seiten:
http://en.cppreference.com/w/c/language/operator_precedence
http://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorit%C3%A4t
entgegen
http://rn-wissen.de/wiki/index.php/C-Tutorial#Reihenfolge_der_Auswertung
MfG
-
Destiniy schrieb:
Was bedeutet Unary plus and minus?
unary/unär heißt ein Operand, binary/binär heißt zwei Operanden. Beispiel: a * b ist ein binäres * und bedeutet Multiplikation, *p ist unär und heißt Dereferenzierung eines Zeigers.
Unäres plus/minus sind die Vorzeichen: +2, -1.
Ich weiß allerdings nicht, warum du dich darauf so versteifst. Der Tipp mit den gleichen Prioritäten war falsch und wurde schon zurückgezogen, noch bevor du darauf reagiert hast.
-
OK dann brauch man da keine Klammern
-
Allerdings ist es nicht schlecht, die Klammern trotzdem zu setzen. Sonst guckst du in 4 Wochen auf deinen Code und rätselst wieder, was genau dort passiert.
Geht mir zumindest manchmal so...
-
Destiniy schrieb:
dann gibt es auch noch sich wiedersprechende Seiten:
http://en.cppreference.com/w/c/language/operator_precedence
http://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorit%C3%A4t
entgegen
http://rn-wissen.de/wiki/index.php/C-Tutorial#Reihenfolge_der_Auswertung
MfG
Nur die auf cppreference.com ist richtig und erwähnt zudem auch C99 und C11.
-
Destiniy schrieb:
Wo steht dann was bei gleicher Priorität vorgeht?
Das ist diese "Associativity" in den Tabellen. Addition ist zum Beispiel linksassoziativ, d.h.
4+5+6
ist(4+5)+6
. Präfix ++ und logisches NOT (!) sind hingegen rechtassoziativ, d.h.!++foo
ist!(++foo)
.EinGast schrieb:
Destiniy schrieb:
dann gibt es auch noch sich wiedersprechende Seiten:
http://en.cppreference.com/w/c/language/operator_precedence
http://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorit%C3%A4t
entgegen
http://rn-wissen.de/wiki/index.php/C-Tutorial#Reihenfolge_der_Auswertung
MfG
Nur die auf cppreference.com ist richtig und erwähnt zudem auch C99 und C11.
Könnt ihr einem alten, blinden Mann mal sagen, wo da Unterschiede sein sollen? Meint ihr die Zahl in der ersten Spalte? Aber Priorität* /= Präzedenz+. Hohe Priorität heißt kleiner Präzedenzfaktor.
*: Übersetzung: "Wie sehr kommt man früher dran"
+: Zu deutsch ungefähr: "Als wievielter kommt man dran".
-
[quote="SeppJ"]
Destiniy schrieb:
Könnt ihr einem alten, blinden Mann mal sagen, wo da Unterschiede sein sollen?
Bei Wikibooks und dieser RN-Wissen-Seite sind Postfix-In- und -Dekrement (momentan) falsch. Deren Priorität ist 15.
-
EinGast schrieb:
SeppJ schrieb:
Könnt ihr einem alten, blinden Mann mal sagen, wo da Unterschiede sein sollen?
Bei Wikibooks und dieser RN-Wissen-Seite sind Postfix-In- und -Dekrement (momentan) falsch. Deren Priorität ist 15.
Ahh, jetzt sehe ich es. Beziehungsweise nicht mehr, da du es bei Wikibooks bereits korrigiert hast
.
Da sieht man mal wieder die Qualität von Online-Tutorials. Selbst von Tutorial-Wikis. Viele Anfänger zusammen machen eben immer noch keinen qualifizierten Autor.
(cppreference.com ist zwar auch eine Wiki, aber mit anderer, erfahrenerer Zielgruppe und somit auch Autorengruppe. Ebenso die Wikipedia zum gleichen Thema)