<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[C++ Operatoren Vorrang ausführlich bitte]]></title><description><![CDATA[<p>Hallo</p>
<p>Also ich programmiere nun eigentlich schon seit Jahren mit C++ aber jetzt überlege ich doch mal wieder etwas über den Vorrang bei Operatoren. Folgendes:</p>
<pre><code class="language-cpp">//Bei Arithmetischen Operatoren völlig klar:
	int i = 1 + 2 * 3 + 2; //9: nicht erwünschtes Ergebnis (* hat Vorrang)
	int i = (1 + 2) * (3 + 2); //15: erwünschtes Ergebnis ( () hat Vorrang)

    bool val1 = true;
    bool val2 = true;
    bool val3 = false;

    //wo soll hier der Vorrang von || und &amp;&amp; sein?
    //Hier wird ja von Links nach Rechts ausgewertet...
    if(val1 || val2 == true &amp;&amp; val3 == true){}

    //Hier entsteht erst ein Vorrang durch die () also eher eine Gruppe, als Vorrang, oder was jetzt?
    if((val1 || val2 == true) &amp;&amp; val3 == true){}

    //Genau das gleiche, nur umgekehrt. Also, wo ist hier Vorrang?
    if(val3 == true &amp;&amp; (val1 || val2 == true)){}
</code></pre>
<p>Bei den Arithmetischen Operatoren verstehe ich durchaus den Sinn des Vorrangs (Mathe like). Sonst gibt es unerwünschte Ergebnisse bei der Zuweisung. Aber speziell bei den Logischen Operatoren (&amp;&amp;, ||) verstehe ich nicht ganz wo da Vorrang besteht? Man macht ihn im Endeffekt ja selber (je nach dem wie man die Operanden setzt). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Und wenn man zwei Operanden gruppiert, spricht man da schon von Vorrang? Für mich bedeutet das eigentlich nur &quot;Beide Operanden ergeben einen Gesamtausdruck (bei || z.B., siehe Beispiel oben) anstatt nur einer davon. Könnte mir das mal einer genauer erläutern?</p>
<p>Und was ich überhaupt nicht verstehe, sind die Vorränge bei allen anderen Operatoren wie:</p>
<p>-&gt;, ::, ?, :, etc.</p>
<p>Wie ist da Vorrang zu verstehen? Als if/else Beispiel in Form von ?:, da kann man sowieso nicht :? schreiben. Könnt ihr mir da bitte mal das ganze etwas ausführlicher (mit Beispielen) erläutern? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246305/c-operatoren-vorrang-ausführlich-bitte</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 07:43:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246305.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Jul 2009 10:31:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 10:31:01 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Also ich programmiere nun eigentlich schon seit Jahren mit C++ aber jetzt überlege ich doch mal wieder etwas über den Vorrang bei Operatoren. Folgendes:</p>
<pre><code class="language-cpp">//Bei Arithmetischen Operatoren völlig klar:
	int i = 1 + 2 * 3 + 2; //9: nicht erwünschtes Ergebnis (* hat Vorrang)
	int i = (1 + 2) * (3 + 2); //15: erwünschtes Ergebnis ( () hat Vorrang)

    bool val1 = true;
    bool val2 = true;
    bool val3 = false;

    //wo soll hier der Vorrang von || und &amp;&amp; sein?
    //Hier wird ja von Links nach Rechts ausgewertet...
    if(val1 || val2 == true &amp;&amp; val3 == true){}

    //Hier entsteht erst ein Vorrang durch die () also eher eine Gruppe, als Vorrang, oder was jetzt?
    if((val1 || val2 == true) &amp;&amp; val3 == true){}

    //Genau das gleiche, nur umgekehrt. Also, wo ist hier Vorrang?
    if(val3 == true &amp;&amp; (val1 || val2 == true)){}
</code></pre>
<p>Bei den Arithmetischen Operatoren verstehe ich durchaus den Sinn des Vorrangs (Mathe like). Sonst gibt es unerwünschte Ergebnisse bei der Zuweisung. Aber speziell bei den Logischen Operatoren (&amp;&amp;, ||) verstehe ich nicht ganz wo da Vorrang besteht? Man macht ihn im Endeffekt ja selber (je nach dem wie man die Operanden setzt). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Und wenn man zwei Operanden gruppiert, spricht man da schon von Vorrang? Für mich bedeutet das eigentlich nur &quot;Beide Operanden ergeben einen Gesamtausdruck (bei || z.B., siehe Beispiel oben) anstatt nur einer davon. Könnte mir das mal einer genauer erläutern?</p>
<p>Und was ich überhaupt nicht verstehe, sind die Vorränge bei allen anderen Operatoren wie:</p>
<p>-&gt;, ::, ?, :, etc.</p>
<p>Wie ist da Vorrang zu verstehen? Als if/else Beispiel in Form von ?:, da kann man sowieso nicht :? schreiben. Könnt ihr mir da bitte mal das ganze etwas ausführlicher (mit Beispielen) erläutern? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749727</guid><dc:creator><![CDATA[vorranger]]></dc:creator><pubDate>Sun, 26 Jul 2009 10:31:01 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 11:36:01 GMT]]></title><description><![CDATA[<p>Es wird nicht von links nach rechts ausgewertet. Es wird immer nach der Reihenfolge der Operatoren vorgegangen. Um deine Beispiele mal durchzugehen:</p>
<pre><code class="language-cpp">if(val1 || val2 == true &amp;&amp; val3 == true){}
// wird ausgewertet als:
val1 || ((val2 == true) &amp;&amp; (val3 == true))

    if((val1 || val2 == true) &amp;&amp; val3 == true){}
// Wird ausgewertet als
(val1 || (val2 == true)) &amp;&amp; (val3 == true))

    if(val3 == true &amp;&amp; (val1 || val2 == true)){} 
// Wird ausgewertet als
((val3 == true) &amp;&amp; (val1 || (val2 == true)))
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1749745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749745</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 26 Jul 2009 11:36:01 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 11:40:03 GMT]]></title><description><![CDATA[<p>Also nach Stroustrup verhält ist die Stärke der Operatoren so:<br />
1. == - Operator<br />
2. &amp;&amp; - Operator<br />
3. || - Operator</p>
<p>Somit wird dein erstes Beispiel so ausgewertet:</p>
<pre><code class="language-cpp">if(val1 || val2 == true &amp;&amp; val3 == true){}
</code></pre>
<p>--&gt;</p>
<pre><code class="language-cpp">if(val1 || ( ( val2 == true ) &amp;&amp; (val3 == true) ) ){}
</code></pre>
<pre><code class="language-cpp">if((val1 || val2 == true) &amp;&amp; val3 == true){}
</code></pre>
<p>--&gt;</p>
<pre><code class="language-cpp">if((val1 || (val2 == true) ) &amp;&amp; (val3 == true) ){}
</code></pre>
<pre><code class="language-cpp">if(val3 == true &amp;&amp; (val1 || val2 == true)){}
</code></pre>
<p>--&gt;</p>
<pre><code class="language-cpp">if( (val3 == true) &amp;&amp; (val1 || ( val2 == true) ) ){}
</code></pre>
<p>Die Klammern werden aber auf jeden Fall einzeln ausgewertet.</p>
<p>Die restlichen Operatoren kannst du auch entweder im Standard nachschlagen, oder im Stroustrup schön einer Liste entnehmen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> (s.130 - 6.2)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749749</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 26 Jul 2009 11:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 12:28:18 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Es wird nicht von links nach rechts ausgewertet. Es wird immer nach der Reihenfolge der Operatoren vorgegangen.</p>
</blockquote>
<p>Ja und das ergibt für mich (leserlich) ja dann Links nach Rechts ;). Ich lese den Code (speziell Bedingungen) immer von Links nach Rechts. Ausser bei Zuweisungen, von Rechts nach Links. Insofern stimmt das doch. Eure Beispiele repräsentieren ja genau das was ich auch meinte. Die Klammern die ihr nun eingesetzt habt, verdeutlichen das fürs Auge nur besser. Aber genau so meine ich das ja auch.</p>
<p>Also habe ich die Jahre lang nun keinen mist gelernt. Es spielt keine Rolle ob man zuerst einen || Operator einsetzt oder einen &amp;&amp; Operator. Fakt ist, man setzt es so ein wie man es braucht und ausgewertet wird es der Reihe nach. Vorrang Klammern gruppieren Operanden eigentlich nur, um sicherzustellen das dort ein Gesamtausdruck entsteht der dann für den Linken (und vielleicht auch Rechten) Operanden ausschlaggebend ist. Stimmt doch?</p>
<p>Was ist aber mit dem Rest den ich da geschrieben habe? Könnt ihr mir mal bitte ein konkretes Fallbeispiel machen, für den Vorrang von Operatoren wie:</p>
<h2>[]<br />
-&gt;<br />
::<br />
?:<br />
++</h2>
<p>Das macht für mich keinen Sinn.</p>
<pre><code class="language-cpp">int i = array[67];
</code></pre>
<p>Wo soll [] hier nun Vorrang haben? Und ausserdem, wo soll der Postfix und Präfix Operator Vorrang haben? Man setzt sich doch den Vorrang selbstständig mit dem Einsatz von Post/Präfix <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> . Sprich: Wählt man Präfix, ist ja klar das der Wert erst erhöht wird (und somit ++ den Vorrang hat) und dann an den L-Wert zugewiesen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749770</guid><dc:creator><![CDATA[vorranger]]></dc:creator><pubDate>Sun, 26 Jul 2009 12:28:18 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 12:29:59 GMT]]></title><description><![CDATA[<p>vorranger schrieb:</p>
<blockquote>
<p>Aber speziell bei den Logischen Operatoren (&amp;&amp;, ||) verstehe ich nicht ganz wo da Vorrang besteht?</p>
</blockquote>
<p>Vermutlich die Annahme, die DNF sei häufiger anzutreffen.<br />
<a href="http://de.wikipedia.org/wiki/Disjunktive_Normalform" rel="nofollow">http://de.wikipedia.org/wiki/Disjunktive_Normalform</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749772</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Jul 2009 12:29:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 12:37:13 GMT]]></title><description><![CDATA[<p>vorranger schrieb:</p>
<blockquote>
<p>Wo soll [] hier nun Vorrang haben?</p>
</blockquote>
<p>c=!a[i];</p>
<p>vorranger schrieb:</p>
<blockquote>
<p>Und ausserdem, wo soll der Postfix und Präfix Operator Vorrang haben?</p>
</blockquote>
<p>c=++a/2;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749774</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Jul 2009 12:37:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 12:43:06 GMT]]></title><description><![CDATA[<p>Hm..</p>
<p>Also ich glaube es geht hier jedem so, dass wenn man dein Beispiel lesen würde, man sofort denkt:</p>
<p>&quot;c wird der Negierende Wert von a mit Element n übergeben&quot;. So lese ich zumindest. Da stelle ich mir jetzt die Frage, dass dies bereits der Vorrang ist. Sprich, da [] den Vorrang hat, wird mit dem Operator erstmal der Zeiger des Array gesetzt und ert dann mit dem &quot;!&quot; Operator der Wert negiert. Hab ichs nun? Wenn das so ist, wer von euch macht sich denn überhaupt noch über diese Reihenfolge gedanken? Das ist doch absolute unterbewuste Routine, nicht? Aber sollte ich Recht haben, dann verstehe ich nun die Vorrang zusammenhänge auch mit anderen Beispielen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749778</guid><dc:creator><![CDATA[vorranger]]></dc:creator><pubDate>Sun, 26 Jul 2009 12:43:06 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 12:55:18 GMT]]></title><description><![CDATA[<p>vorranger schrieb:</p>
<blockquote>
<p>Wenn das so ist, wer von euch macht sich denn überhaupt noch über diese Reihenfolge gedanken? Das ist doch absolute unterbewuste Routine, nicht?</p>
</blockquote>
<p>Jo.<br />
Und man weiß, wo Gefahren stecken und solcher Code</p>
<pre><code class="language-cpp">cout &lt;&lt; a+=5 &lt;&lt; '\n';
</code></pre>
<p>ist sofort verdächtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749784</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Jul 2009 12:55:18 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 13:03:39 GMT]]></title><description><![CDATA[<p>vorranger schrieb:</p>
<blockquote>
<p>Sprich, da [] den Vorrang hat, wird mit dem Operator erstmal der Zeiger des Array gesetzt und ert dann mit dem &quot;!&quot; Operator der Wert negiert. Hab ichs nun?</p>
</blockquote>
<p>Jup.<br />
Darfst aber nicht in die Falle tapsen, immer das zu lesen, was Du für im Programm sinnvoll hältst.</p>
<p>Nach</p>
<pre><code class="language-cpp">int i[]={5,10};
int* a=&amp;i[0];
int c;
</code></pre>
<p>Könnte ich aus die 10 auslesen und den Auslesezeiger erhöhen mit</p>
<pre><code class="language-cpp">c=*a++;
</code></pre>
<p>oder die 5 auslesen und erhöhen mit</p>
<pre><code class="language-cpp">c=*a++;
</code></pre>
<p>Im Zweifelsfall setzt man besser unnütze Klammern.</p>
<pre><code class="language-cpp">c=(*a)++;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">c=*(a++);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1749790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749790</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Jul 2009 13:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Operatoren Vorrang ausführlich bitte on Sun, 26 Jul 2009 13:37:00 GMT]]></title><description><![CDATA[<p>Alles klar, dann vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749807</guid><dc:creator><![CDATA[vorranger]]></dc:creator><pubDate>Sun, 26 Jul 2009 13:37:00 GMT</pubDate></item></channel></rss>