<?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[Bitwise Operations Verständnisproblem]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich möchte meiner Klasse beibringen mit so genannten <em>FLAGS</em> umzugehen.<br />
Mit solch einer Schreibweise:</p>
<pre><code class="language-cpp">void func(FLAG1 | FLAG2);
</code></pre>
<p>Also habe ich mich etwas informiert und bin auf Bitwise Operations gestoßen und habe mir auch durchgelesen wie und warum das ganze im detail funktioniert Meine Quelle war <a href="http://en.wikipedia.org/wiki/Bitwise_operation" rel="nofollow">http://en.wikipedia.org/wiki/Bitwise_operation</a>. Ich habe eigentlich alles verstanden, beziehungsweise es ist nichts unklar. Nun versuche ich die ganze Theorie in C/C++ Abzubilden. Jedoch scheitert das etwas und ich komme nicht ganz dahinter, wo hier mein Denkfehler liegt.</p>
<p>Um nicht alles kompliziert zu machen, habe ich ein Test-Schnipsel geschrieben, welches mein Problem veranschaulichen soll.</p>
<pre><code class="language-cpp">// Das sind meine Eigenschaten
// Geplant ist as god, immortal und invisible enthält.
enum property
{
    immortal = 1 &lt;&lt; 1,
    invisible = 1 &lt;&lt; 2,
    god = 1 &lt;&lt; 3
};

// Meine Funktion, welche die Eigenschafen Prüft und
// entsprechend reagiert.
void make_me(int prop)
{
    if (prop &amp; immortal)
        std::cout &lt;&lt; &quot;I'm immortal&quot; &lt;&lt; std::endl;
    if (prop &amp; invisible)
        std::cout &lt;&lt; &quot;I'm invisible&quot; &lt;&lt; std::endl;
}

// Sollte unmissverständlich sein
int main()
{
    std::cout &lt;&lt; &quot;(*)make_me(immortal)&quot; &lt;&lt; std::endl;
    make_me(immortal);
    std::cout &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;(*)make_me(invisible)&quot; &lt;&lt; std::endl;
    make_me(invisible);
    std::cout &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;(*)make_me(immortal | invisible)&quot; &lt;&lt; std::endl;
    make_me(immortal | invisible);
    std::cout &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;make_me(god)&quot; &lt;&lt; std::endl;
    make_me(god);

    return 0;
}
</code></pre>
<p>Num zum Problem. Die Ausgaben von <code>make_me(imortal)</code> , <code>make_me(invisible)</code> und <code>make_me(imortal | invisible)</code> funktionieren genau so wie sie sollen.</p>
<pre><code>Output:
(*)make_me(immortal)
I'm immortal

(*)make_me(invisible)
I'm invisible

(*)make_me(immortal| invisible)
I'm immortal
I'm invisible

(*)make_me(god)
</code></pre>
<p>Was ich nicht verstehe ist warum <code>make_me(god)</code> keine ausgabe gibt. So wie ich das verstanden habe müsste die Kombination von allem ( <code>immortal</code> UND <code>invisible</code> ) <code>god</code> entsprechen, oder sehe ich das hier falsch?</p>
<p>Über Tipps wäre ich dankbar.</p>
<p>Grüße.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307859/bitwise-operations-verständnisproblem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 09:31:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307859.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Sep 2012 22:11:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bitwise Operations Verständnisproblem on Thu, 06 Sep 2012 22:11:18 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich möchte meiner Klasse beibringen mit so genannten <em>FLAGS</em> umzugehen.<br />
Mit solch einer Schreibweise:</p>
<pre><code class="language-cpp">void func(FLAG1 | FLAG2);
</code></pre>
<p>Also habe ich mich etwas informiert und bin auf Bitwise Operations gestoßen und habe mir auch durchgelesen wie und warum das ganze im detail funktioniert Meine Quelle war <a href="http://en.wikipedia.org/wiki/Bitwise_operation" rel="nofollow">http://en.wikipedia.org/wiki/Bitwise_operation</a>. Ich habe eigentlich alles verstanden, beziehungsweise es ist nichts unklar. Nun versuche ich die ganze Theorie in C/C++ Abzubilden. Jedoch scheitert das etwas und ich komme nicht ganz dahinter, wo hier mein Denkfehler liegt.</p>
<p>Um nicht alles kompliziert zu machen, habe ich ein Test-Schnipsel geschrieben, welches mein Problem veranschaulichen soll.</p>
<pre><code class="language-cpp">// Das sind meine Eigenschaten
// Geplant ist as god, immortal und invisible enthält.
enum property
{
    immortal = 1 &lt;&lt; 1,
    invisible = 1 &lt;&lt; 2,
    god = 1 &lt;&lt; 3
};

// Meine Funktion, welche die Eigenschafen Prüft und
// entsprechend reagiert.
void make_me(int prop)
{
    if (prop &amp; immortal)
        std::cout &lt;&lt; &quot;I'm immortal&quot; &lt;&lt; std::endl;
    if (prop &amp; invisible)
        std::cout &lt;&lt; &quot;I'm invisible&quot; &lt;&lt; std::endl;
}

// Sollte unmissverständlich sein
int main()
{
    std::cout &lt;&lt; &quot;(*)make_me(immortal)&quot; &lt;&lt; std::endl;
    make_me(immortal);
    std::cout &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;(*)make_me(invisible)&quot; &lt;&lt; std::endl;
    make_me(invisible);
    std::cout &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;(*)make_me(immortal | invisible)&quot; &lt;&lt; std::endl;
    make_me(immortal | invisible);
    std::cout &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;make_me(god)&quot; &lt;&lt; std::endl;
    make_me(god);

    return 0;
}
</code></pre>
<p>Num zum Problem. Die Ausgaben von <code>make_me(imortal)</code> , <code>make_me(invisible)</code> und <code>make_me(imortal | invisible)</code> funktionieren genau so wie sie sollen.</p>
<pre><code>Output:
(*)make_me(immortal)
I'm immortal

(*)make_me(invisible)
I'm invisible

(*)make_me(immortal| invisible)
I'm immortal
I'm invisible

(*)make_me(god)
</code></pre>
<p>Was ich nicht verstehe ist warum <code>make_me(god)</code> keine ausgabe gibt. So wie ich das verstanden habe müsste die Kombination von allem ( <code>immortal</code> UND <code>invisible</code> ) <code>god</code> entsprechen, oder sehe ich das hier falsch?</p>
<p>Über Tipps wäre ich dankbar.</p>
<p>Grüße.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249269</guid><dc:creator><![CDATA[create_problem]]></dc:creator><pubDate>Thu, 06 Sep 2012 22:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to Bitwise Operations Verständnisproblem on Thu, 06 Sep 2012 22:20:36 GMT]]></title><description><![CDATA[<p>ne.<br />
da steht 1 &lt;&lt; 3, nicht 6.<br />
1 &lt;&lt; 3 ist 8.<br />
1 &lt;&lt; 2 ist 4 und 1 &lt;&lt; 1 ist 2.</p>
<p>und 2|4 ist halt eben 6 und nicht 8.<br />
bzw. umgekehrt: in 8 ist weder das bit 1 nocht das bit 2 gesetzt, sondern nur das bit 3 (mit 0 beginnend gezählt, also 1 = bit 0). also gibt sowohl 8 &amp; (1&lt;&lt;2) als auch 8 &amp; (1&lt;&lt;1) als ergebnis 0.</p>
<p>wenn du die 1 &lt;&lt; wegnimmst hast du 1 (bit 0), 2 (bit 1) und 3 (bit 0 und 1). dann würde es gehen.</p>
<p>oder du schreibst gleich was du meinst, also god = immortal | invisible. dann würde es auch gehen, auch mit unveränderten immortal und invisible werten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249270</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 06 Sep 2012 22:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to Bitwise Operations Verständnisproblem on Thu, 06 Sep 2012 22:45:40 GMT]]></title><description><![CDATA[<p>Ach mist, darauf hätte ich auch selber kommen müssen. Danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249273</guid><dc:creator><![CDATA[create_problem]]></dc:creator><pubDate>Thu, 06 Sep 2012 22:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to Bitwise Operations Verständnisproblem on Thu, 06 Sep 2012 23:00:46 GMT]]></title><description><![CDATA[<p>Kein Problem.<br />
Klar gestellte Frage, gut und ausreichend beschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Bei sowas hilft man gerne (noch dazu wenn es so einfach ist wie hier <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/2249276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249276</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 06 Sep 2012 23:00:46 GMT</pubDate></item></channel></rss>