<?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[Bit Operation (OR) Einzel Bit setzen!]]></title><description><![CDATA[<p>Guten Tag erst einmal <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>
<p>Ich habe eine Frage bezüglich des Setzens von Bits, dabei benutze ich auch inline Assembler und Bitoperationen.<br />
Zum Hintergrund: Schreibe an einer Byte Klasse, die auch ein paar Funktionen beinhalten soll, darunter fällt auch, das setzen von einzelnen Bits in dem Byte-Objekt.</p>
<pre><code class="language-cpp">void Byte::setBit(unsigned char bitNo)
{	 // Wenn Bit schon gesetzt ist, passiert nichts!
	 /* 8 Mögliche Bit Kombis
	    1000 0000 128 --&gt; 0x80
	    0100 0000 64  --&gt; 0x40
		 0010 0000 32  --&gt; 0x20
		 0001 0000 16  --&gt; 0x10
		 0000 1000 8   --&gt; 0x08
		 0000 0100 4   --&gt; 0x04
		 0000 0010 2   --&gt; 0x02
		 0000 0001 1   --&gt; 0x01
	 */
	 unsigned char bitPattern = 0x01;
	 // links-shift um die bitNr. s.o.
	 bitPattern = bitPattern &lt;&lt; bitNo;
	 std::cout &lt;&lt; &quot;bNumber:   &quot; &lt;&lt; (int)bNumber &lt;&lt; std::endl;
	 std::cout &lt;&lt; &quot;bitPattern: &quot; &lt;&lt; (int)bitPattern &lt;&lt; std::endl;
	 unsigned char tmp = 0;

	 __asm {
		  MOV al, bNumber;
		  OR al, bitPattern;
		  MOV tmp, al;
	 }
	 bNumber = tmp;
	 std::cout &lt;&lt; &quot;bNumber:   &quot; &lt;&lt; (int)bNumber &lt;&lt; std::endl;
}
</code></pre>
<p>Das Problem: Als Beispielwert habe ich bitNo = 4 gesetzt und bNumber = 32.<br />
Daraus folgt dann, dass bitPattern == 16 ist. So weit so gut.<br />
Jetzt kommt es zu dem asm-code. Meiner Meinung nach müsste 32 OR 16 = 48 ergeben. Doch bei der Ausgabe sagt er mir, &quot;bNumber: 16&quot;.</p>
<p>Hat einer von euch eine Idee und kann mir mit Rat und Tat zur Seite stehen?</p>
<p>Viele Grüße an alle <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/241354/bit-operation-or-einzel-bit-setzen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 12:21:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241354.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 May 2009 14:25:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bit Operation (OR) Einzel Bit setzen! on Tue, 19 May 2009 14:25:54 GMT]]></title><description><![CDATA[<p>Guten Tag erst einmal <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>
<p>Ich habe eine Frage bezüglich des Setzens von Bits, dabei benutze ich auch inline Assembler und Bitoperationen.<br />
Zum Hintergrund: Schreibe an einer Byte Klasse, die auch ein paar Funktionen beinhalten soll, darunter fällt auch, das setzen von einzelnen Bits in dem Byte-Objekt.</p>
<pre><code class="language-cpp">void Byte::setBit(unsigned char bitNo)
{	 // Wenn Bit schon gesetzt ist, passiert nichts!
	 /* 8 Mögliche Bit Kombis
	    1000 0000 128 --&gt; 0x80
	    0100 0000 64  --&gt; 0x40
		 0010 0000 32  --&gt; 0x20
		 0001 0000 16  --&gt; 0x10
		 0000 1000 8   --&gt; 0x08
		 0000 0100 4   --&gt; 0x04
		 0000 0010 2   --&gt; 0x02
		 0000 0001 1   --&gt; 0x01
	 */
	 unsigned char bitPattern = 0x01;
	 // links-shift um die bitNr. s.o.
	 bitPattern = bitPattern &lt;&lt; bitNo;
	 std::cout &lt;&lt; &quot;bNumber:   &quot; &lt;&lt; (int)bNumber &lt;&lt; std::endl;
	 std::cout &lt;&lt; &quot;bitPattern: &quot; &lt;&lt; (int)bitPattern &lt;&lt; std::endl;
	 unsigned char tmp = 0;

	 __asm {
		  MOV al, bNumber;
		  OR al, bitPattern;
		  MOV tmp, al;
	 }
	 bNumber = tmp;
	 std::cout &lt;&lt; &quot;bNumber:   &quot; &lt;&lt; (int)bNumber &lt;&lt; std::endl;
}
</code></pre>
<p>Das Problem: Als Beispielwert habe ich bitNo = 4 gesetzt und bNumber = 32.<br />
Daraus folgt dann, dass bitPattern == 16 ist. So weit so gut.<br />
Jetzt kommt es zu dem asm-code. Meiner Meinung nach müsste 32 OR 16 = 48 ergeben. Doch bei der Ausgabe sagt er mir, &quot;bNumber: 16&quot;.</p>
<p>Hat einer von euch eine Idee und kann mir mit Rat und Tat zur Seite stehen?</p>
<p>Viele Grüße an alle <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1712833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712833</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Tue, 19 May 2009 14:25:54 GMT</pubDate></item><item><title><![CDATA[Reply to Bit Operation (OR) Einzel Bit setzen! on Tue, 19 May 2009 14:42:18 GMT]]></title><description><![CDATA[<p>Hi Kronos_m,</p>
<p>wieso willst Du das mit Inline-Assembler machen?<br />
C(++) bringt die nötigen Operatoren doch schon alle mit. Ein 'bitweises oder' erreichst Du mit '|' (ohne die Anführungszeichen), ein 'bitweises und' mit '&amp;', ein 'bitweises negieren' mit '~'.</p>
<p>Deine ganze Funktion wird damit zu</p>
<pre><code class="language-cpp">void Byte::setBit(unsigned char bitNo)
{
    bNumber |= (1 &lt;&lt; bitNo);
}
</code></pre>
<p>Ein Rücksetzen würde so aussehen:</p>
<pre><code class="language-cpp">void Byte::resetBit(unsigned char bitNo)
{
    bNumber &amp;= ~(1 &lt;&lt; bitNo);
}
</code></pre>
<p>Würde sagen, das ist etwas kürzer <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>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712841</guid><dc:creator><![CDATA[Ampfing]]></dc:creator><pubDate>Tue, 19 May 2009 14:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to Bit Operation (OR) Einzel Bit setzen! on Tue, 19 May 2009 14:47:59 GMT]]></title><description><![CDATA[<p><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="👍"
    /> Ich bin spontan begeistert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /></p>
<p>Super, ich danke dir. Das ist natürlich simpel. Und es funktioniert, habe es gerade getestet.<br />
Trotzdem merkwürdig, dass der Umweg über inline Assembler nicht so läuft!</p>
<p>Danke...</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712844</guid><dc:creator><![CDATA[Kronos_m]]></dc:creator><pubDate>Tue, 19 May 2009 14:47:59 GMT</pubDate></item></channel></rss>