<?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[Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich kann ja in c++ einfach boolische Ausdrücke mit dem &amp;&amp; Operator verbinden und verknüpfen.<br />
Den &amp; Operator kenn ich nur von Zeigern (Adresse eines Zeigers)</p>
<p>Ich habe gerade ein Programm gefunden, in welchem zwei Statements mit einem einfachen &amp; verknüpft waren. Komisch aber es funktioniert trotzdem ....<br />
Kann mir einer erklären warum??? und was ein einfaches &amp; in diesen Zusammenhang bedeutet und ob es gar erlaubt ist .....<br />
Kurzes Programm dazu ... (dachte erst er überprüft nur die erste Bedingung ...)</p>
<p>int start = 2;<br />
int a = 1;<br />
int b = 3;<br />
int c = 6;<br />
int ende = 5;</p>
<p>if ((a &gt; start)&amp;(a &lt; ende)) {cout &lt;&lt; &quot;(a &gt; start)&amp;(a &lt; ende)&quot; &lt;&lt; endl;}<br />
if ((b &gt; start)&amp;(b &lt; ende)) {cout &lt;&lt; &quot;(b &gt; start)&amp;(b &lt; ende)&quot; &lt;&lt; endl;}<br />
if ((c &gt; start)&amp;(c &lt; ende)) {cout &lt;&lt; &quot;(c &gt; start)&amp;(c &lt; ende)&quot; &lt;&lt; endl;}<br />
/// oder<br />
if ((a &gt; start)&amp;&amp;(a &lt; ende)) {cout &lt;&lt; &quot;(a &gt; start)&amp;&amp;(a &lt; ende)&quot; &lt;&lt; endl;}<br />
if ((b &gt; start)&amp;&amp;(b &lt; ende)) {cout &lt;&lt; &quot;(b &gt; start)&amp;&amp;(b &lt; ende)&quot; &lt;&lt; endl;}<br />
if ((c &gt; start)&amp;&amp;(c &lt; ende)) {cout &lt;&lt; &quot;(c &gt; start)&amp;&amp;(c &lt; ende)&quot; &lt;&lt; endl;}</p>
<p>==&gt; Ausgabe am Bildschirm...<br />
(b &gt; start)&amp;(b &lt; ende)<br />
(b &gt; start)&amp;&amp;(b &lt; ende)</p>
<p>Grüße<br />
balou</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268112/unterschied-amp-und-amp-amp-operator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 10:27:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268112.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Jun 2010 12:30:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 12:30:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich kann ja in c++ einfach boolische Ausdrücke mit dem &amp;&amp; Operator verbinden und verknüpfen.<br />
Den &amp; Operator kenn ich nur von Zeigern (Adresse eines Zeigers)</p>
<p>Ich habe gerade ein Programm gefunden, in welchem zwei Statements mit einem einfachen &amp; verknüpft waren. Komisch aber es funktioniert trotzdem ....<br />
Kann mir einer erklären warum??? und was ein einfaches &amp; in diesen Zusammenhang bedeutet und ob es gar erlaubt ist .....<br />
Kurzes Programm dazu ... (dachte erst er überprüft nur die erste Bedingung ...)</p>
<p>int start = 2;<br />
int a = 1;<br />
int b = 3;<br />
int c = 6;<br />
int ende = 5;</p>
<p>if ((a &gt; start)&amp;(a &lt; ende)) {cout &lt;&lt; &quot;(a &gt; start)&amp;(a &lt; ende)&quot; &lt;&lt; endl;}<br />
if ((b &gt; start)&amp;(b &lt; ende)) {cout &lt;&lt; &quot;(b &gt; start)&amp;(b &lt; ende)&quot; &lt;&lt; endl;}<br />
if ((c &gt; start)&amp;(c &lt; ende)) {cout &lt;&lt; &quot;(c &gt; start)&amp;(c &lt; ende)&quot; &lt;&lt; endl;}<br />
/// oder<br />
if ((a &gt; start)&amp;&amp;(a &lt; ende)) {cout &lt;&lt; &quot;(a &gt; start)&amp;&amp;(a &lt; ende)&quot; &lt;&lt; endl;}<br />
if ((b &gt; start)&amp;&amp;(b &lt; ende)) {cout &lt;&lt; &quot;(b &gt; start)&amp;&amp;(b &lt; ende)&quot; &lt;&lt; endl;}<br />
if ((c &gt; start)&amp;&amp;(c &lt; ende)) {cout &lt;&lt; &quot;(c &gt; start)&amp;&amp;(c &lt; ende)&quot; &lt;&lt; endl;}</p>
<p>==&gt; Ausgabe am Bildschirm...<br />
(b &gt; start)&amp;(b &lt; ende)<br />
(b &gt; start)&amp;&amp;(b &lt; ende)</p>
<p>Grüße<br />
balou</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906744</guid><dc:creator><![CDATA[balou123]]></dc:creator><pubDate>Fri, 04 Jun 2010 12:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 12:44:12 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-14774.html" rel="nofollow">akari</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-2.html" rel="nofollow">VCL (C++ Builder)</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906749</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 04 Jun 2010 12:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 12:48:11 GMT]]></title><description><![CDATA[<p>&amp; -&gt; binäres und<br />
Die Bits der zwei Werte werden verglichen - jedes Bit, das bei beiden Werten gesetzt ist, wird auch im Ergebnis gesetzt sein.</p>
<p>&amp;&amp; -&gt; logisches und<br />
Ist der erste Ausdruck wahr (ungleich 0) und der zweite Ausdruck wahr (ungleich 0), so wird auch das Ergebnis wahr sein (1).</p>
<p>Eine Abfrage ala &quot;if (1 &amp; 4)&quot; wird wahr sein, wenn beide Werte mindestens ein gemeinsam gesetztes Bit haben. Denn in dem Fall wird das Ergebnis größer als 0 sein, und ist damit wahr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906753</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Fri, 04 Jun 2010 12:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 13:03:08 GMT]]></title><description><![CDATA[<p>Ah okay Danke!</p>
<p>D.h. if (1 &amp; ungeradeZahl) wird immer wahr sein .... bei ner geraden nicht ...</p>
<p>Danke noch mal ...<br />
Grüße<br />
balou</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906762</guid><dc:creator><![CDATA[balou123]]></dc:creator><pubDate>Fri, 04 Jun 2010 13:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 13:06:36 GMT]]></title><description><![CDATA[<p>balou123 schrieb:</p>
<blockquote>
<p>D.h. if (1 &amp; ungeradeZahl) wird immer wahr sein .... bei ner geraden nicht ...</p>
</blockquote>
<p>Ja. Ist quasi die optimierte Version von &quot;if (n % 2 == 1)&quot; (Bitoperationen sind schneller als ne Division). Abre das optimiert der Compiler in der Regel sowieso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906763</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Fri, 04 Jun 2010 13:06:36 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 13:13:00 GMT]]></title><description><![CDATA[<p>Ich ignoriere jetzt mal überladene Operatoren.</p>
<p>Bei &quot;a &amp; b&quot; (binäres Und) ist das Ergebnis eine Ganzzahl, welche sich durch bitweises-Und der Operanden ergibt. Beide Seiten werden auf jeden Fall und in einer undefinierten Reihenfolge ausgewertet, um das Ergebnis zu berechnen. Beispiel: 6 &amp; 3 --&gt; 2, da</p>
<pre><code>binär dezimal
00110    6
00011    3
------------
00010
</code></pre>
<p>Bei &quot;a &amp;&amp; b&quot; (logisches Und) ist das Ergebnis <code>true</code> oder <code>false</code> . Die Operanden werden durch &amp;&amp; zu bool konvertiert, falls sie es nicht schon sind. Allerdings wird der zweite Operand nur dann ausgewertet, wenn der erste <code>true</code> liefert. Man bezeichnet es deswegen auch als &quot;kurzschließendes&quot; Und. Das erlaubt einem zB so etwas:</p>
<pre><code>if (zeiger &amp;&amp; zeiger-&gt;dings==2) {
}
</code></pre>
<p>Wenn zeiger hier ein Nullzeiger ist, wird der zweite Teil schon nicht mehr ausgewertet. Es wird also garantiert <em>nicht</em> ein Nullzeiger dereferenziert.</p>
<p>balou123 schrieb:</p>
<blockquote>
<p>Ich habe gerade ein Programm gefunden, in welchem zwei Statements mit einem einfachen &amp; verknüpft waren. Komisch aber es funktioniert trotzdem ....<br />
Kann mir einer erklären warum???</p>
<pre><code class="language-cpp">if ((a &gt; start) &amp;  (a &lt; ende)) {cout &lt;&lt; &quot;(a &gt; start)&amp;(a &lt; ende)&quot; &lt;&lt; endl;}
/// oder
if ((a &gt; start) &amp;&amp; (a &lt; ende)) {cout &lt;&lt; &quot;(a &gt; start)&amp;&amp;(a &lt; ende)&quot; &lt;&lt; endl;}
</code></pre>
</blockquote>
<p>In beiden Fällen sind die Operanden vom Typ bool.</p>
<p>Im ersten Fall werden beide Operanden ausgewertet, zu int konvertiert (integral promotion, also false--&gt;0, true--&gt;1), ein binäres Und angewendet und wieder zu bool für die if-Bedingung konvertiert (0--&gt;false, sonst--&gt;true)</p>
<p>Im zweiten Fall wird zunächst nur der erste Operand ausgewertet. Falls da <code>false</code> bei rauskommt wird der zweite nicht mehr ausgewertet. Falls <code>true</code> rauskommt wird der zweite Operand ausgewertet und je nachdem, was da rauskommt, der Block ausgeführt oder nicht.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906766</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 04 Jun 2010 13:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 14:57:11 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Es wird also garantiert nicht ein Nullzeiger dereferenziert.</p>
</blockquote>
<p>Soweit ich weiss, kann man bei einigen Kompilern bei den Optionen einstellen, dass boolsche Ausdrücke immer komplett ausgewertet werden. Es ist also durchaus möglich, auf diese Weise einen Nullzeiger zu dereferenzieren.</p>
<p>MfG, Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906809</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Fri, 04 Jun 2010 14:57:11 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 15:07:35 GMT]]></title><description><![CDATA[<p>Das ist dann aber kein C++ mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906812</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Fri, 04 Jun 2010 15:07:35 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 15:35:23 GMT]]></title><description><![CDATA[<p>Dteht das im C++ Standard, dass boolsche Ausdrücke nicht ganz ausgewertet werden müssen UND dass die Ausdrücke von links nach rechts abgearbeitet werden müssen? Ich persönlich würde mich nicht darauf verlassen.<br />
Da schreibe ich doch lieber sowas: if(pObj)pObj-&gt;DoSomething();<br />
Finde ich persönlich sicherer, lasse mich aber gerne belehren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906827</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Fri, 04 Jun 2010 15:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 15:39:32 GMT]]></title><description><![CDATA[<p>Jochen S. schrieb:</p>
<blockquote>
<p>Dteht das im C++ Standard, dass boolsche Ausdrücke nicht ganz ausgewertet werden müssen UND dass die Ausdrücke von links nach rechts abgearbeitet werden müssen? Ich persönlich würde mich nicht darauf verlassen.<br />
Da schreibe ich doch lieber sowas: if(pObj)pObj-&gt;DoSomething();<br />
Finde ich persönlich sicherer, lasse mich aber gerne belehren.</p>
</blockquote>
<p>Doch das steht so drin. Genauso bei ||, wenn das erste schon true ist, wird beim zweiten gar nicht mehr geguckt. soll ich die Stelle raussuchen oder glaubst du mir das auch so? Das ist eine weit verbreitete Programmiertechnik, wie z.B. die besagte Verhinderung von Nullpointerdereferenzierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906831</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 04 Jun 2010 15:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 15:40:03 GMT]]></title><description><![CDATA[<p>Jochen S. schrieb:</p>
<blockquote>
<p>Dteht das im C++ Standard, dass boolsche Ausdrücke nicht ganz ausgewertet werden müssen UND dass die Ausdrücke von links nach rechts abgearbeitet werden müssen? Ich persönlich würde mich nicht darauf verlassen.</p>
</blockquote>
<p>Doch, natürlich kann man sich auf die Short-Circuit-Evaluation-Semantik von &amp;&amp; und || verlassen. Es steht im C++-Standard, dass bei</p>
<pre><code class="language-cpp">true || a;
false &amp;&amp; b;
</code></pre>
<p>weder <code>a</code> noch <code>b</code> ausgewertet werden dürfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906832</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 04 Jun 2010 15:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 18:01:47 GMT]]></title><description><![CDATA[<p>Wäre schrecklich, wenn das nicht gehen würde, denn es gibt sehr viele:</p>
<pre><code class="language-cpp">foo* pf = some_bar();

if ( pf &amp;&amp; pf-&gt;get_value() == 2 ) {...}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1906921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906921</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 04 Jun 2010 18:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Unterschied &amp;amp; und &amp;amp;&amp;amp; Operator on Fri, 04 Jun 2010 19:53:16 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Ich glaubs dir. Du musst das jetzt nicht extra wegen mir suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1906982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1906982</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Fri, 04 Jun 2010 19:53:16 GMT</pubDate></item></channel></rss>