<?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[Geradzahligkeit ermitteln]]></title><description><![CDATA[<p>Ist vlt. etwas billig aber gibt es eine fertige Funktion mit der man eine Zahl auf gerade/ungerade prüfen kann? Ansonsten fällt mir nur ein zu vergleichen, ob am Zahlenende 0,2,4,6 oder 8 steht und das dann mit true oder false ausgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223124/geradzahligkeit-ermitteln</link><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 02:20:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223124.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Sep 2008 14:51:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 14:51:28 GMT]]></title><description><![CDATA[<p>Ist vlt. etwas billig aber gibt es eine fertige Funktion mit der man eine Zahl auf gerade/ungerade prüfen kann? Ansonsten fällt mir nur ein zu vergleichen, ob am Zahlenende 0,2,4,6 oder 8 steht und das dann mit true oder false ausgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586060</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Mon, 22 Sep 2008 14:51:28 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 14:53:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool is_even(int num) {
  return num%2==0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1586061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586061</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 22 Sep 2008 14:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 14:55:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">inline bool isEven (int num)
{ return !(num &amp; 1); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1586062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586062</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Mon, 22 Sep 2008 14:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 15:34:02 GMT]]></title><description><![CDATA[<p>Na das ging ja fix, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586079</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Mon, 22 Sep 2008 15:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 18:45:31 GMT]]></title><description><![CDATA[<p>Weisst du auch, was die Funktion macht? <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586172</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 22 Sep 2008 18:45:31 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 21:03:13 GMT]]></title><description><![CDATA[<p>Dividiert num durch 2 und gibt den Rest zurück. Rest = 0 gerade Rest nicht 0 ungerade.<br />
Ist das sinngemäß richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586208</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Mon, 22 Sep 2008 21:03:13 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 21:18:23 GMT]]></title><description><![CDATA[<p>Ist es, ja. Die Alternative von audacia schaut einfach direkt, ob das letzte Bit gesetzt ist, so gesehen ist Shades Variante allgemeingültiger. Aber du siehst, die letzte Ziffer im Dezimalsystem ist völlig irrelevant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586211</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 22 Sep 2008 21:18:23 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 21:37:22 GMT]]></title><description><![CDATA[<p>audacias Variante ist wahrscheinlich nicht einmal schneller, auch wenn direkt mit Bits hantiert wird (wegen Compileroptimierung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586217</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 22 Sep 2008 21:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Mon, 22 Sep 2008 21:39:23 GMT]]></title><description><![CDATA[<p>....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586218</guid><dc:creator><![CDATA[Scheppertreiber]]></dc:creator><pubDate>Mon, 22 Sep 2008 21:39:23 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 02:38:46 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>audacias Variante ist wahrscheinlich nicht einmal schneller, auch wenn direkt mit Bits hantiert wird (wegen Compileroptimierung).</p>
</blockquote>
<p>ACK<br />
Dafür ist sie &quot;geekiger&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586254</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 23 Sep 2008 02:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 07:24:50 GMT]]></title><description><![CDATA[<p>Das macht der Vc++ 2005 draus (release build):</p>
<p>Shadows Variante:</p>
<pre><code class="language-asm">_is_even PROC					
; _num$ = eax

; 4    :   return num%2==0; 

	and	eax, -2147483647			; 80000001H
	jns	SHORT $LN3@is_even
	dec	eax
	or	eax, -2					; fffffffeH
	inc	eax
$LN3@is_even:
	neg	eax
	sbb	eax, eax
	add	eax, 1

; 5    : } 

	ret	0
_is_even ENDP
</code></pre>
<p>audacias Variante:</p>
<pre><code class="language-asm">_is_even2 PROC					
; _num$ = eax

; 9    :   return !(num&amp;1);

	not	eax
	and	eax, 1

; 10   : } 

	ret	0
_is_even2 ENDP
</code></pre>
<p>Es wird zwar in der ersten die Division wegoptimiert, aber wirklich schön isses trotzdem nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586298</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 23 Sep 2008 07:24:50 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 07:38:52 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Dafür ist sie &quot;geekiger&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Und schöner formatiert. SCNR <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/1586310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586310</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Tue, 23 Sep 2008 07:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 07:44:18 GMT]]></title><description><![CDATA[<p>Modulo-Operationen sind leider immer recht teuer. Da kann der Compiler auch nicht viel dran optimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586313</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 23 Sep 2008 07:44:18 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 08:04:19 GMT]]></title><description><![CDATA[<p>Also bei MOD 2^n kann ein Compiler sehr wohl optimieren.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19908">@vlad_tepesch</a>: Optimierer war auf was eingestellt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586323</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 23 Sep 2008 08:04:19 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 08:40:19 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Modulo-Operationen sind leider immer recht teuer. Da kann der Compiler auch nicht viel dran optimieren.</p>
</blockquote>
<pre><code>TS-MacBook-Pro:Code ts$ cat test.c
int is_even(int num) {
  return num % 2 == 0;
}

int is_even2(int num) {
  return !(num&amp;1);
}
TS-MacBook-Pro:Code ts$ gcc -O3 -c test.c -S
TS-MacBook-Pro:Code ts$ cat test.s
	.text
	.align 4,0x90
.globl _is_even
_is_even:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %eax
	xorl	$1, %eax
	andl	$1, %eax
	leave
	ret
	.align 4,0x90
.globl _is_even2
_is_even2:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %eax
	xorl	$1, %eax
	andl	$1, %eax
	leave
	ret
	.subsections_via_symbols
TS-MacBook-Pro:Code ts$ gcc --version
i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5488)
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
</code></pre>
<p>also zumindest mein gcc kann das problemlos optimieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586349</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 23 Sep 2008 08:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 12:39:49 GMT]]></title><description><![CDATA[<blockquote>
<p>also zumindest mein gcc kann das problemlos optimieren...</p>
</blockquote>
<p>Naja, optimiert ist auch was anderes!</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19908">@vlad_tepesch</a>: Optimierer war auf was eingestellt?</p>
</blockquote>
<p>Full optimization; Favor fast Code</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586500</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 23 Sep 2008 12:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 13:27:18 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Naja, optimiert ist auch was anderes!</p>
</blockquote>
<p>Was meinst du?</p>
<p>Zuhause werde ich es dann beim vc++08 mal testen und die ergebnisse posten. kann mir irgendwie nicht vorstellen dass es moderne compiler gibt die so doof sind dass sie das nicht optimieren können.</p>
<p>bei dem von dir geposteten asm code wird sehr komisch herumgerechnet um am ende wieder das selbe zu machen was er bei der anderen version macht:<br />
add eax, 1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586532</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 23 Sep 2008 13:27:18 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 14:21:01 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Naja, optimiert ist auch was anderes!</p>
</blockquote>
<p>Was meinst du?</p>
</blockquote>
<p>Das nenn ich optimal:</p>
<pre><code class="language-asm">_is_even2 PROC                   
; _num$ = eax

; 9    :   return !(num&amp;1);

    not    eax
    and    eax, 1

; 10   : }

    ret    0
_is_even2 ENDP
</code></pre>
<blockquote>
<p>Zuhause werde ich es dann beim vc++08 mal testen und die ergebnisse posten.</p>
</blockquote>
<p>Was ich gepostet hatte stammt doch vom vc8.</p>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Das macht der Vc++ 2005 draus (release build):</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1586567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586567</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 23 Sep 2008 14:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 14:47:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool is_even(int num) {
  return num%2u==0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1586580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586580</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 23 Sep 2008 14:47:48 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 14:55:57 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Das nenn ich optimal:</p>
<pre><code class="language-asm">_is_even2 PROC                   
; _num$ = eax

; 9    :   return !(num&amp;1);

    not    eax
    and    eax, 1

; 10   : }

    ret    0
_is_even2 ENDP
</code></pre>
</blockquote>
<p>Verstehst du den asm Code überhaupt?<br />
Nichts anderes macht der gcc. bits invertieren und dann testen ob das rechteste bit eine 1 ist.</p>
<p>ob du dafür not oder xor verwendest ist egal. es wird seinen grund haben warum der gcc hier lieber xor und der vc++ lieber not nimmt.</p>
<p>und nach dem xor/not wird ein and gemacht. fertig.</p>
<p>ich habe dem gcc aber verboten die funktion inline zu definieren so wie du es dem vc++ erlaubt hast - was dazu führt dass der code leicht verfälscht ist, da es schwerer ist die genauen kosten zu berechnen.</p>
<p>deshalb muss bei mir der gcc erst den parameter vom stack popen und in ein register schieben. So kann ich genau die kosten der Funktion erkennen und kann garantieren dass nichts wegoptimiert wird was generell nötig ist aber für den aktuellen fall uninteressant ist.</p>
<p>zB wenn der compiler weiss dass num immer 2 ist, kann er die funktion zu einem<br />
mov eax, 1<br />
machen und fertig. aber das wäre ja doof, deshalb verbiete ich ihm diese optimierungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586589</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 23 Sep 2008 14:55:57 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 18:11:52 GMT]]></title><description><![CDATA[<p>Und wie langweilig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
camper hat wie immer recht. dumme sache das. mach mal fehler!!</p>
<pre><code>PUBLIC	_is_even
; Function compile flags: /Ogtpy
; File d:\code\testili\testili\extern.cpp
;	COMDAT _is_even
_TEXT	SEGMENT
_num$ = 8						; size = 4
_is_even PROC						; COMDAT

; 2    : 	return num%2u == 0;

	mov	eax, DWORD PTR _num$[esp-4]
	not	eax
	and	eax, 1

; 3    : }

	ret	0
_is_even ENDP
_TEXT	ENDS
PUBLIC	_is_even2
; Function compile flags: /Ogtpy
;	COMDAT _is_even2
_TEXT	SEGMENT
_num$ = 8						; size = 4
_is_even2 PROC						; COMDAT

; 6    : 	return !(num&amp;1);

	mov	eax, DWORD PTR _num$[esp-4]
	not	eax
	and	eax, 1

; 7    : }

	ret	0
_is_even2 ENDP
_TEXT	ENDS
</code></pre>
<p>sehr dummer vc++ aber. denn er koennte eigentlich wissen dass 2 nicht negativ sein kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586716</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 23 Sep 2008 18:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 18:34:43 GMT]]></title><description><![CDATA[<p>Wirklich sehr dumm, dem VC++ hätte ich schon etwas mehr zugetraut...</p>
<p>Wie ist das eigentlich mit anderen Operationen, z.B. Bitshift bzw. Multiplikation/Division mit 2? Das wäre ja das Letzte, wenn man Performanceeinbusse in Kauf nehmen müsste, weil man keine Bitschiebereien einsetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1586759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586759</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Sep 2008 18:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to Geradzahligkeit ermitteln on Tue, 23 Sep 2008 19:01:11 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>sehr dummer vc++ aber. denn er koennte eigentlich wissen dass 2 nicht negativ sein kann...</p>
</blockquote>
<p>Das weiß er schon, er weiß aber nicht -kann nicht wissen - dass num nicht negativ sein kann (das kann es ja sehr wohl). 2u deshalb nur, um den ersten Operanden implizit in unsigned zu konvertieren statt einen cast zu bemühen. vc hat ja recht insofern, dass vorzeichenbehaftete Integer-Division, wenn man sie mit shifts baut, für negative Werte anders ausgeführt werden muss (weil arithmetisches Rechtsshift stets abrundet, Division durch eine dagegen immer Richtung 0 bei x86&amp;co) - daher die Unterscheidung. Das ist bei gcc auch nicht anders - nur ist dort der Optimierer offenbar clever genug zu erkennen, dass das in diesem speziellen Fall unerheblich ist. Bleibt noch zu erwähnen für diejenigen, die Assembler nicht verstehen, dass der Compiler audacias Variante in folgendes Äquivalent (2er-Komplement!) transformiert:</p>
<pre><code class="language-cpp">inline bool isEven (int num)
{ return ~num &amp; 1; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1586782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1586782</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 23 Sep 2008 19:01:11 GMT</pubDate></item></channel></rss>