Frage zur Priorität von Operatoren



  • Alle schreiben das voneinander ab, aber Sinn ergibt es trotzdem nicht. Es gibt keine Mehrdeutigkeit bei einem Ausdruck wie --*&x oder foo(x).y++, im Gegensatz zu a-b-c, was auf 2 Arten geklammert werden kann, von denen man sinnvollerweise die links-assoziative, also (a-b)-c, vorschreibt.


  • Mod

    @bashar sagte in Frage zur Priorität von Operatoren:

    Alle schreiben das voneinander ab, aber Sinn ergibt es trotzdem nicht. Es gibt keine Mehrdeutigkeit bei einem Ausdruck wie --*&x oder foo(x).y++, im Gegensatz zu a-b-c, was auf 2 Arten geklammert werden kann, von denen man sinnvollerweise die links-assoziative, also (a-b)-c, vorschreibt.

    Das von mir gebrachte Beispiel i++++ wäre aber durchaus mehrdeutig, wenn man nur mit den Konzepten "Priorität" und "Assoziativität" daran geht. Natürlich macht i(++++) keinen Sinn, aber das ändert ja nichts daran, dass man eine Regel braucht, die einem vorschreibt, dass (i++)++ die einzig richtige Interpretation ist.

    Siehe aber auch meine Bemerkung von oben, dass im Sprachstandard diese Konzepte gar nicht auftauchen.



  • Ja, man braucht so eine Regel, aber diese hat nichts mit Assoziativität zu tun.


  • Mod

    @bashar sagte in Frage zur Priorität von Operatoren:

    Ja, man braucht so eine Regel, aber diese hat nichts mit Assoziativität zu tun.

    Kann man aber auch mittels Assoziativität formulieren, die Regel.



  • Nein, eben nicht. Aber das führt wohl zu nichts mehr.


  • Mod

    @bashar sagte in Frage zur Priorität von Operatoren:

    Nein, eben nicht. Aber das führt wohl zu nichts mehr.

    Du verzeihst, wenn mir ein 'eben nicht' als Erklärung ein bisschen dünn ist, besonders nachdem ich gezeigt habe, wie die Regel lautet und wie ihre Anwendung zu dem richtigen Ergebnis führt.



  • Und was erwartest du jetzt? Ein wochenlanges Streitgespräch zu dem Thema?


  • Mod

    @bashar sagte in Frage zur Priorität von Operatoren:

    Und was erwartest du jetzt? Ein wochenlanges Streitgespräch zu dem Thema?

    Überhaupt irgendeine Art von Begründung?

    @bashar sagte in Frage zur Priorität von Operatoren:

    Assoziativität gibts bei unären Operatoren nicht.

    @bashar sagte in Frage zur Priorität von Operatoren:

    Alle schreiben das voneinander ab, aber Sinn ergibt es trotzdem nicht. Es gibt keine Mehrdeutigkeit bei einem Ausdruck wie --*&x oder foo(x).y++, im Gegensatz zu a-b-c, was auf 2 Arten geklammert werden kann, von denen man sinnvollerweise die links-assoziative, also (a-b)-c, vorschreibt.

    @bashar sagte in Frage zur Priorität von Operatoren:

    Ja, man braucht so eine Regel, aber diese hat nichts mit Assoziativität zu tun.

    @bashar sagte in Frage zur Priorität von Operatoren:

    Nein, eben nicht. Aber das führt wohl zu nichts mehr.

    Du schreibst sehr viel, aber sagst letztlich nur, dass es so wäre, aber nicht warum. Da es in diesem Thread viele Beispiele und Erklärungen für die Gegenthese gibt, wieso sollte man dir Beachtung schenken? Wir wollen ja vielleicht alle was lernen, aber wenn du nichts erklärst, dann ist das nicht hilfreich.



  • Da gibts auch nicht viel zu begründen, und ich hab null Motivation, dir zu erklären, warum das mit dem i(++++) Quatsch ist.


  • Mod

    Also redest du nur rum. Dachte ich mir schon, als du immer ausweichend geantwortet hast. Schade.



  • Lass es doch mal gut sein! Was hast du denn davon? Ich werd keine idiotensichere Dissertation verfassen, die dein i(++++) präzise widerlegt, und ich werde auch nicht formal meine Niederlage erklären, damit wirst du jetzt wohl leben müssen.


  • Mod

    @bashar sagte in Frage zur Priorität von Operatoren:

    Lass es doch mal gut sein! Was hast du denn davon?

    Ich würde gerne überhaupt mal wissen, was du meinst. Hier in diesem Thread wurde so einiges erklärt. Du hast stets dazwischen gerufen "Stimmt nicht!", aber weder gesagt warum, noch was du denkst was richtig ist. Das ist Wutz, nicht bashar.



  • Hi(gh)!

    Okay, ich habe offensichtlich die Reihenfolge von Wertzuweisung und Inkrementierung (bzw. Dekrementierung) mit der Richtung der Verknüpfung zweier Operanden verquickt... jetzt habe ich es verstanden, wie das mit Post- und Präfix funktioniert!

    Dass der Goll/Grüner/Wiese aber so ein Murks sein soll hätte ich nicht unbedingt erwartet - das wurde uns seinerzeit (1999-2001 - ich musste leider wegen eines Nervenzusammenbruchs in einer C++-Klausur vorzeitig abbrechen) am b.i.b. in Bergisch Gladbach als verbindliches Lehrbuch vorgegeben...

    Bis bald im Khyberspace!

    Yadgar


  • Mod

    @yadgar sagte in Frage zur Priorität von Operatoren:

    Dass der Goll/Grüner/Wiese aber so ein Murks sein soll hätte ich nicht unbedingt erwartet - das wurde uns seinerzeit (1999-2001 - ich musste leider wegen eines Nervenzusammenbruchs in einer C++-Klausur vorzeitig abbrechen) am b.i.b. in Bergisch Gladbach als verbindliches Lehrbuch vorgegeben...

    Deutsche Computerliteratur ist rar, und gute deutsche Computerliteratur ist nahezu nichtexistent. Irgendetwas mussten sie empfehlen aus der Menge schlechter Bücher. Achtung: Das heißt nicht im Umkehrschluss, dass englische Bücher gut wären, auch dort gibt es ungeheuer viel Schrott. Aber die wirklich guten Bücher sind alle auf Englisch und selten übersetzt.

    Trotzdem hat sich in 20 Jahren einiges getan. Ich kann nicht verstehen, wie man bei einem derart schnelllebigem Thema 20 Jahre alte Literaturtipps nehmen kann. Wir kommen hier im Forum gar nicht nach, die Literaturtipps aktuell zu halten und haben dies deswegen auf externe Quellen verlagert.



  • Was Links/Rechtsassoziativität ist, kannst du z.B. auf Wikipedia nachlesen.

    https://de.wikipedia.org/wiki/Operatorassoziativität
    https://en.wikipedia.org/wiki/Operator_associativity#Right-associativity_of_assignment_operators

    Hier hat's auch ein etwas geduldigerer Zeitgenosse erklärt: https://stackoverflow.com/questions/12961351/does-it-make-sense-for-unary-operators-to-be-associative#12963342

    «It might be an abuse of terminology or at least a new coinage to refer to this unary grouping as "associativity". »

    Da steht aber auch Unsinn wie dass (!!) in einer funktionalen Sprache als Komposition zweier Operatoren verstanden werden kann. Das ist ein unüberlegter Schnellschuss, denn es wäre in dem Fall ! kein Operator, sondern ein Term, es würde nicht der ! Operator auf den zweiten Operator (oder Term) ! angewendet, sondern durch Juxtaposition zweier Terme würde eine Komposition gebildet. (Selbst wenn das auf den Spezialfall der !-Funktion eingeschränkt wäre.)

    Das wäre in der einen oder anderen Form auch bei deinem i(++++) der Fall: Der linke ++ wird zu einem Term, die "Assoziativität", die die Gruppierung von Operatoren regelt, führt sich selbst ad absurdum. Man kann natürlich alles machen, was irgendwie konsistent definiert werden kann. Was man nicht kann ist, sowas lapidar durch die Angabe "links-assoziativ" in einer Operatorentabelle zu spezifizieren. Sonst kann man das aber: um ein System von Operatoren zu spezifizieren, gibst du jedem einen Rang, gibst den binären eine Assoziativität und sagst bei den unären, ob sie Prefix oder Postfix sein sollen (diese Angaben müssen innerhalb eines Ranges einheitlich sein.)

    Die Frage, die wir hier behandeln, sollte sein: Wie kam es dazu, dass man unären Operatoren eine Assoziativität zuordnet? Das steht ja schon im K&R so. Wahrscheinlich Bequemlichkeit, Prefix/Postfix hat ja schon irgendwie was mit Gruppierung zu tun, und die entsprechende Tabellenspalte ist für unäre Operatoren unbenutzt ...

    Aus meiner Sicht hast du dir ein Kindergartenbeispiel aus dem A... gezogen und sitzt jetzt auf der bequemen Position, dass ich sowohl dagegen und gegen die existierende Literatur argumentieren muss. (Ist das arrogant? Natürlich, aber solange die nur voneinander abschreiben und nicht diskutieren, wie sie auf diese Bezeichnung kommen und es ihren Verteidigern überlassen, sich Beispiele wie i(++++) auszudenken, ist das gerechtfertigt.) Natürlich hab ich darauf keine Lust. Ich hab hier an die 20000 Postings verfasst, du hast eine vergleichbare Karriere, wir streiten gerne um sinnlose Sachen im Internet. Für mich ist das aber schon lange vorbei. Ich muss nicht mehr Leuten erklären, dass es in Java nur Call-by-value gibt, die es nicht hören wollen. Das jetzt nur, weil du mich persönlich angesprochen hast. Ich hab grad bestimmt eine Stunde mich mit diesem Editor hier herumgeärgert, wahrscheinlich für nichts. Ich bereue es schon, mich überhaupt eingemischt zu haben. Glaub doch, was du willst, es ist letztlich vollkommen egal.


  • Mod

    War das so schwer? Jetzt weiß endlich jeder, was du überhaupt gemeint hast und sich selber ein Bild machen, ob deine Begründung Sinn macht, oder ob die andere Erklärung besser ist. Es ist eben nicht genug, einfach nur zu rufen "stimmt nicht!", egal wie viele Beiträge man hat. Das stört nur und kann man sich auch sparen.

    Jetzt, da ich deine Position sehe, kann ich es für mich persönlich als nicht überzeugend abhaken, zumal deine zitierten Erklärungen später genau die gleichen Erklärungen abgeben, die ich und andere hier selber schon gegeben haben. Dies auszudiskutieren wäre eine kleinliche Internetdiskussion, die wir uns tatsächlich beide sparen können. Schließlich ist nun alles gesagt und jeder kann sich ein Bild machen. Vorher war nur eine Sache gesagt und jemand anderes rief dazwischen, dass es da noch etwas wichtiges gibt, aber er wollte partout nicht verraten, was.



  • Hi(gh)!

    Deutsche Computerliteratur ist rar, und gute deutsche Computerliteratur ist nahezu nichtexistent. Irgendetwas mussten sie empfehlen aus der Menge schlechter Bücher. Achtung: Das heißt nicht im Umkehrschluss, dass englische Bücher gut wären, auch dort gibt es ungeheuer viel Schrott. Aber die wirklich guten Bücher sind alle auf Englisch und selten übersetzt.

    Deutsche brauchen ja auch nicht programmieren zu können! Deutsche brauchen ihre stumpfsinnigen fordistischen klack-klack-klack-Fließbandjobs (am besten in der Autoindustrie, prollerolleroll grunz grunz!) oder irgendwelche Nine-to-five-Sinekuren in der Verwaltung, der Verwaltungsverwaltung und der Verwaltungsverwaltung der Verwaltung (frei nach Parkinson), DrehstuhlfurzerInnen, die Formulare abstempeln und das dann hachte Aaabeit nennen...

    2005 wollte ich mal X3D lernen, gab das Vorhaben dann aber auf, nachdem das einzige hierzulande erhältliche Lehrbuch über 100 Euro kosten sollte (und natürlich auf Englisch war - nicht, dass ich damit Probleme hätte, aber halt eben mit den 100 Euro...) - 2012 ging es dann endlich, dank Terrashop...

    Bis bald im Khyberspace!

    Yadgar



  • @yadgar sagte in Frage zur Priorität von Operatoren:

    Deutsche brauchen ja auch nicht programmieren zu können! Deutsche brauchen ihre stumpfsinnigen...

    Das ist falsch, und außerdem einfach sinnlos und nutzlos. Und es gibt schon Gründe, warum (gute) Fachliteratur vor allem auf Englisch geschrieben wird.

    @Bashar: ich finds als "unbeteiligter" auch gut, dass du dich geäußert hast, ich fand das nicht umsonst. Ich hatte den Thread immer nur überflogen und fands nicht interessant genug (und jetzt auch noch nicht), um mich wirklich reinzudenken. Aber man nimmt auch beim Überfliegen ein bisschen was mit und wenn sich jemand "querstellt", dann stört das. Ich finds wie gesagt immer noch nicht interessant genug, mich da intensiv reinzudenken, aber wenigstens weiß ich jetzt auch was du willst. Und wenn sich jemand genauer damit befassen will, dann kann er das auch. So find ich das viel konstruktiver.



  • Hi(gh)!

    @dirkb sagte in Frage zur Priorität von Operatoren:

    Wikibooks sieht das anders: https://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorität

    Lies mal die 1 Sterne Bewertung zu dem Buch bei Amazon durch: https://www.amazon.de/C-als-erste-Programmiersprache-ISO-Standard/product-reviews/3519229994/ref=cm_cr_dp_d_hist_1?ie=UTF8&filterByStar=one_star&reviewerType=all_reviews#reviews-filter-bar

    Die vielen 5-Sterne Bewertungen kannst du nicht nehmen, weil die Bewerter halt Anfänger sind und die Fehler aus dem Buch nicht erkennen können.

    Ich merke allmählich auch, dass das Buch nicht so toll ist - mich stören die oft genug abstrus-exotischen Beispiele - und was bitte sollen in einem Lehrbuch, das sich explizit "C als erste Programmiersprache" nennt, die ständigen Verweise auf Pascal oder Fortran?

    Da sind dann wahrscheinlich die Ausführungen zu rekursiven Algorithmen:

    "Theoretisch sind Iteration und Rekursion äquivalent, weil man jede Iteration in eine Rekursion umformen kann und umgekehrt." (S. 182)

    bzw.

    "Auch wenn es nicht zum Stacküberlauf kommen sollte [den konnte ich vorhin beim Programmbeispiel "Harmonische Reihe" live bewundern - 200000 Durchläufe wurden noch korrekt abgearbeitet, bei 500000 gab es einen Speicherzugriffsfehler], so ist dennoch zu berücksichtigen, dass die Rekursion mehr Speicherplatz und Rechenzeit erfordert als die entsprechende iterative Formulierung" (S. 186)

    auch nur mit Vorsicht zu genießen... oder?

    Bis bald im Khyberspace!

    Yadgar



  • @yadgar sagte in Frage zur Priorität von Operatoren:

    auch nur mit Vorsicht zu genießen... oder?

    Ne, das kommt so schon hin.


Anmelden zum Antworten