<?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[Frage zu modulo 2&#x2F;Bitwise &amp;amp;]]></title><description><![CDATA[<p>Hallo,<br />
ich lese dauernd, dass die Prüfung, ob eine Zahl gerade/ungerade ist, über den modulo Operator laufen soll</p>
<pre><code class="language-cpp">template&lt;typename T&gt; inline bool IsEven(const T zahl) { return !(zahl%2); }
</code></pre>
<p>Ich lese aber auch, dass der modulo Operator (relativ) langsam ist. Warum wählt man also nicht folgende Variante?</p>
<pre><code class="language-cpp">template&lt;typename T&gt; inline bool IsEven(const T zahl) { return !(zahl&amp;1); }
</code></pre>
<p>Wegen der Portabilität (sollte ja nur bei Big-Endian funktionieren)? Weil es nur auf POD's anwendbar ist? Oder optimiert der Compiler das eh weg?</p>
<p>In b4: Bitte keine &quot;Premature Optimization&quot; Flames&quot; :p</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/249330/frage-zu-modulo-2-bitwise-amp</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 14:30:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/249330.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Sep 2009 02:25:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 02:25:58 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich lese dauernd, dass die Prüfung, ob eine Zahl gerade/ungerade ist, über den modulo Operator laufen soll</p>
<pre><code class="language-cpp">template&lt;typename T&gt; inline bool IsEven(const T zahl) { return !(zahl%2); }
</code></pre>
<p>Ich lese aber auch, dass der modulo Operator (relativ) langsam ist. Warum wählt man also nicht folgende Variante?</p>
<pre><code class="language-cpp">template&lt;typename T&gt; inline bool IsEven(const T zahl) { return !(zahl&amp;1); }
</code></pre>
<p>Wegen der Portabilität (sollte ja nur bei Big-Endian funktionieren)? Weil es nur auf POD's anwendbar ist? Oder optimiert der Compiler das eh weg?</p>
<p>In b4: Bitte keine &quot;Premature Optimization&quot; Flames&quot; :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773031</guid><dc:creator><![CDATA[IsEven?]]></dc:creator><pubDate>Sun, 06 Sep 2009 02:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 02:30:43 GMT]]></title><description><![CDATA[<p>Erklär doch kurz die Idee dahinter ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773032</guid><dc:creator><![CDATA[Mitleid]]></dc:creator><pubDate>Sun, 06 Sep 2009 02:30:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 02:31:55 GMT]]></title><description><![CDATA[<p>&amp;1 sollte schneller sein als %2 . . .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773033</guid><dc:creator><![CDATA[IsEven?]]></dc:creator><pubDate>Sun, 06 Sep 2009 02:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 04:16:08 GMT]]></title><description><![CDATA[<p>Also mein Programm verbringt 80% der Zeit mit IsEven Prüfungen. :p <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773038</guid><dc:creator><![CDATA[mnjmnj]]></dc:creator><pubDate>Sun, 06 Sep 2009 04:16:08 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 05:30:59 GMT]]></title><description><![CDATA[<p>Wird doch eh optimier0rt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773039</guid><dc:creator><![CDATA[Optimizat0r]]></dc:creator><pubDate>Sun, 06 Sep 2009 05:30:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 06:33:16 GMT]]></title><description><![CDATA[<p>Wenn's um Geschwindigkeit geht: Ausprobieren. Ich würde vermuten, dass es keinen Unterschied macht. Eventuell wird sogar -- nach Optimierungsphase im Compiler -- der selbe Assembler-Code generiert. (Ich habe es nicht getestet).</p>
<p>Es gibt aber auch noch einen Unterschied bzgl Portabilität. &quot;!(x % 2)&quot; funktioniert immer auf allen möglichen Ganzzahltypen. Der Ausdruck ist <em>unabhängig</em> von der Art der Repräsentierung der Ganzzahlen. &quot;!(x &amp; 1)&quot; kann das falsche Ergebnis liefern. Das ist dann der Fall, wenn der Compiler bzw der Rechner für vorzeichenbehaftete Ganzzahlen das 1er Komplement benutzt. Der Effekt der Bitoperationen auf vorzeichenbehaftete Ganzzahltypen hängt ab von der Repräsentierung der Zahlen, welche offiziell nicht auf das 2er Komplement beschränkt ist.</p>
<p>Also:<br />
1. Compiler-Optimierungen einschalten<br />
2. Prüfen, ob es wirklich einen Unterschied macht<br />
3. Falls !(x &amp; 1) schneller ist, stelle sicher, dass !(x &amp; 1) entweder zum richtigen Ergebnis führt, oder sich der Code nicht kompilieren lässt -- zB über ein Modultest als Teil des Build-Prozesses.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773044</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 06 Sep 2009 06:33:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 10:13:30 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Das ist dann der Fall, wenn der Compiler bzw der Rechner für vorzeichenbehaftete Ganzzahlen das 1er Komplement benutzt.</p>
</blockquote>
<p>Kennst Du geräte, die das tun, oder ist die Äußerung nur Quatsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773136</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 06 Sep 2009 10:13:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 10:16:54 GMT]]></title><description><![CDATA[<p>für unsigned integertypen ist der entstehende assemblercode stets identisch. also schreib defensiv %2 und benutze keine signed typen, wenn du willst, daß der compiler bitfrickelt.<br />
für signed typen habe ich schon unterschiede gesehen, wo &amp;1 schneller war.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773138</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 06 Sep 2009 10:16:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 12:01:38 GMT]]></title><description><![CDATA[<p>Okay, also wenn ich mich auf unsigned POD's beschränke, ist &amp;1 protabel.<br />
Aber wie sieht es mit Litte-/Big Endian aus? Hat das Auswirkungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773205</guid><dc:creator><![CDATA[IsEven?]]></dc:creator><pubDate>Sun, 06 Sep 2009 12:01:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 12:27:09 GMT]]></title><description><![CDATA[<p>Wieso sollte es? In welchem Byte das niederwertigste Bit steht, ist doch egal, solange es für beide Zahlen gleich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773223</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 06 Sep 2009 12:27:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu modulo 2&#x2F;Bitwise &amp;amp; on Sun, 06 Sep 2009 12:33:52 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>[...] 1er Komplement [...]</p>
</blockquote>
<p>Kennst Du geräte, die das tun, oder ist die Äußerung nur Quatsch?</p>
</blockquote>
<p>Weder noch. Ich schätze, es gibt immer noch ein paar Exoten (alte Mainframes?), die nicht das 2er-Komplement benutzen. Wenn dem nicht so wäre, könnte man ja einfach in der nächsten Version der C und C++ Standards das 2er-Komplement erzwingen. Auch in dem neusten C++0x Entwurf gibt es §3.9.1/7:</p>
<blockquote>
<p>Types bool, char, char16_t, char32_t, wchar_t, and the signed and unsigned integer types are collectively called integral types. A synonym for integral type is integer type. The representations of integral types shall define values by use of a pure binary numeration system. [ Example: this International Standard permits 2’s complement, 1’s complement and signed magnitude representations for integral types. — end example ]</p>
</blockquote>
<p>Das erklärt dann auch, warum beispielsweise -127 für SCHAR_MIN erlaubt ist.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1773227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1773227</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 06 Sep 2009 12:33:52 GMT</pubDate></item></channel></rss>