<?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[bitmasken]]></title><description><![CDATA[<p>hy.</p>
<p>hab mal wieder ein problem, mit bits bzw. bitmasken</p>
<p>ich definier mir ne bitmaske in einer .h-datei. z.B:</p>
<pre><code class="language-cpp">#define BITMASK_0 0xC0
</code></pre>
<p>in der c++ datei dann folgender code:</p>
<pre><code class="language-cpp">/*part1 is vom typ unsigned char*/

if (part1 &amp; BIMTASK_0){
//do something
} else if (part1 &amp; BITMAS_1) {
// do something else
} // and so on
</code></pre>
<p>doch irgendwie huepft er mir in kein if-statement rein.</p>
<p>bsp: ich vergleiche zb folgendes (jeweils in extra if)<br />
0xc0 &amp; 0x00<br />
0xc0 &amp; 0x01<br />
0xc0 &amp; 0x02</p>
<p>da sollte er, gleich bei der ersten matchen.</p>
<p>vielleicht liegt das problem daran, dass ich nur z.B. bit 6 und 7 matchen will, der rest is mir eigentlich gleich, aber sollte doch auch kein problem sein.</p>
<p>hat vielleicht jemand ne idee warum das net funzt?</p>
<p>tia<br />
ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/146999/bitmasken</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 23:34:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/146999.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 May 2006 18:15:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bitmasken on Fri, 12 May 2006 18:15:40 GMT]]></title><description><![CDATA[<p>hy.</p>
<p>hab mal wieder ein problem, mit bits bzw. bitmasken</p>
<p>ich definier mir ne bitmaske in einer .h-datei. z.B:</p>
<pre><code class="language-cpp">#define BITMASK_0 0xC0
</code></pre>
<p>in der c++ datei dann folgender code:</p>
<pre><code class="language-cpp">/*part1 is vom typ unsigned char*/

if (part1 &amp; BIMTASK_0){
//do something
} else if (part1 &amp; BITMAS_1) {
// do something else
} // and so on
</code></pre>
<p>doch irgendwie huepft er mir in kein if-statement rein.</p>
<p>bsp: ich vergleiche zb folgendes (jeweils in extra if)<br />
0xc0 &amp; 0x00<br />
0xc0 &amp; 0x01<br />
0xc0 &amp; 0x02</p>
<p>da sollte er, gleich bei der ersten matchen.</p>
<p>vielleicht liegt das problem daran, dass ich nur z.B. bit 6 und 7 matchen will, der rest is mir eigentlich gleich, aber sollte doch auch kein problem sein.</p>
<p>hat vielleicht jemand ne idee warum das net funzt?</p>
<p>tia<br />
ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1056702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1056702</guid><dc:creator><![CDATA[baer]]></dc:creator><pubDate>Fri, 12 May 2006 18:15:40 GMT</pubDate></item><item><title><![CDATA[Reply to bitmasken on Fri, 12 May 2006 18:32:50 GMT]]></title><description><![CDATA[<p>Was du suchst, ist | und nicht &amp; (wenn ich dich richtig verstanden habe).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1056708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1056708</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 12 May 2006 18:32:50 GMT</pubDate></item><item><title><![CDATA[Reply to bitmasken on Fri, 12 May 2006 18:52:10 GMT]]></title><description><![CDATA[<p>danke fuer d schnelle antwort. jetzt funktionierts. obwohl ich das nicht verstehe, is ja *logisches oder* oder nicht?</p>
<p>bsp: ich will, dass bit0 bis bit2 vergleichen, ob die gleich sind,<br />
(a) is der wert, den ich hab, und mit (b) vergleiche. also sollte<br />
folgendes matchen (mit logischem und):<br />
(a) 1100 0001 &amp;<br />
(b) 0000 0001<br />
--------------<br />
(c) 0000 0001</p>
<p>das hier sollte jedoch nicht matchen:<br />
(a) 1100 0001 &amp;<br />
(b) 0000 0010<br />
-------------<br />
(c) 0000 0000</p>
<p>oder nicht? mit logischem oder wuerde folgendes rauskommen:<br />
bsp1:<br />
(c) 1100 0001<br />
bsp2:<br />
(c) 1100 0011</p>
<p><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/1056725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1056725</guid><dc:creator><![CDATA[baer]]></dc:creator><pubDate>Fri, 12 May 2006 18:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to bitmasken on Fri, 12 May 2006 19:12:31 GMT]]></title><description><![CDATA[<pre><code>0xC0    0000 0000 1100 0000
0x02    0000 0000 0000 0010
</code></pre>
<p>Wieso sollte ein &amp; hier ungleich 0 liefern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1056744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1056744</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 12 May 2006 19:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to bitmasken on Fri, 12 May 2006 21:28:01 GMT]]></title><description><![CDATA[<p>baer schrieb:</p>
<blockquote>
<p>bsp: ich vergleiche zb folgendes (jeweils in extra if)<br />
0xc0 &amp; 0x00<br />
0xc0 &amp; 0x01<br />
0xc0 &amp; 0x02</p>
<p>da sollte er, gleich bei der ersten matchen.</p>
</blockquote>
<p>Nope. ZB 0xc0 &amp; 0x00 ergibt 0, was ja bekanntlich zu false evaluiert. Also wird nicht der if sondern der else Zweig ausgeführt.<br />
Und Michaels Vorschlag ist auch keine Lösung für dein Problem.</p>
<p>Du musst das etwas anders machen. Erstmal nimmst du dir eine Bitmaske für die zu vergleichenden Bits. Wenn du Bit 0 bis Bit 2 vergleichen willst, sollte die wie folgt aussehen:</p>
<pre><code class="language-cpp">m = 0x07; // Bit 0 bis 2 gesetzt
</code></pre>
<p>Jetzt hast du mehrere Möglichkeiten. ZB blendest du mit der Maske erstmal alle unwichtigen Bits der zu vergleichenden Werte aus:</p>
<pre><code class="language-cpp">am = a &amp; m;
bm = b &amp; m;
</code></pre>
<p>Alle unwichtigen Bits sind jetzt 0, der Rest hat seinen ursprünglichen Wert behalten. Anschliessend kannst du beide Ergebnisse vergleichen und weisst damit, ob betreffende Bits gleich sind.</p>
<pre><code class="language-cpp">if (am == bm)
    //...
</code></pre>
<p>Eine zweite Möglichkeit wäre, erstmal beide zu vergleichenden Werte zu xor'n:</p>
<pre><code class="language-cpp">c = a ^ b;
</code></pre>
<p>Wie du sicherlich weisst, liefert xor bei Gleichheit 0 und bei Ungleichheit 1 (bitbezogen). Dh, alle Bits, die in a und b gleich sind, sind in c 0, alle anderen 1. Jetzt kannst du wieder mit der Maske alle unwichtigen Bits ausblenden.</p>
<pre><code class="language-cpp">cm = c &amp; m;
</code></pre>
<p>Ist das Ergebnis 0, waren die betreffenden Bits in a und b gleich.</p>
<pre><code class="language-cpp">if (cm == 0)
    //...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1056813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1056813</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 12 May 2006 21:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to bitmasken on Sat, 13 May 2006 13:05:52 GMT]]></title><description><![CDATA[<p>danke fuer die antworten.</p>
<p>werd das asap ausprobieren. (und weiters vertu ich mich immer mit false und true. true is ja alles unglich 0, und false is nur 0)</p>
<p>danke nomal fuer d hilfe. falls noch probleme auftauchen meld ich mich wieder.</p>
<p>ciao<br />
david</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057036</guid><dc:creator><![CDATA[baer]]></dc:creator><pubDate>Sat, 13 May 2006 13:05:52 GMT</pubDate></item></channel></rss>