<?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[Spaß mit Bits]]></title><description><![CDATA[<p>Hey,</p>
<p>um die Netzwerklast vom meinem Programm weiter zu reduzieren, möchte ich gerne einige Bytes einsparen. Das ist auch möglich, da die überflüssigen Bytes nur sehr kleine Zahlen darstellen und ich sie daher alle problemlos in ein Byte bekommen könnte.</p>
<p>Zugreifen möchte ich im Byte auf folgende Bits:<br />
Bit 1-5 (Wertbereich 0-32)<br />
Bit 6-7 (Wertbereich 0-4)<br />
Bit 8 (Wertbereich 0-1)</p>
<p>Wie kann man das am sinnvollsten angehen?</p>
<p>Das Auslesen könnte man vermutlich mit &gt;&gt; und &lt;&lt; gut erledigen, wenn man einfach die überflüssigen Bits zur Seite schiebt. Oder ist das vielleicht keine gute Idee?</p>
<p>Aber wie setze ich die entsprechenden Bits?</p>
<p>Bin sehr gepsannt auf eure Ideen und Anmerkungen <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/topic/282451/spaß-mit-bits</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 01:42:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282451.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Feb 2011 14:11:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:11:43 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>um die Netzwerklast vom meinem Programm weiter zu reduzieren, möchte ich gerne einige Bytes einsparen. Das ist auch möglich, da die überflüssigen Bytes nur sehr kleine Zahlen darstellen und ich sie daher alle problemlos in ein Byte bekommen könnte.</p>
<p>Zugreifen möchte ich im Byte auf folgende Bits:<br />
Bit 1-5 (Wertbereich 0-32)<br />
Bit 6-7 (Wertbereich 0-4)<br />
Bit 8 (Wertbereich 0-1)</p>
<p>Wie kann man das am sinnvollsten angehen?</p>
<p>Das Auslesen könnte man vermutlich mit &gt;&gt; und &lt;&lt; gut erledigen, wenn man einfach die überflüssigen Bits zur Seite schiebt. Oder ist das vielleicht keine gute Idee?</p>
<p>Aber wie setze ich die entsprechenden Bits?</p>
<p>Bin sehr gepsannt auf eure Ideen und Anmerkungen <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/2023706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023706</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:11:43 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:20:16 GMT]]></title><description><![CDATA[<p>Dafür würde ich bitset verwenden.<br />
<a href="http://www.cplusplus.com/reference/stl/bitset/" rel="nofollow">http://www.cplusplus.com/reference/stl/bitset/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023711</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:21:58 GMT]]></title><description><![CDATA[<p>Ich würds gerne ohne std::bitset lösen. Alle Operationen sollen auf einem unsigned char ausgeführt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023712</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:21:58 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:27:09 GMT]]></title><description><![CDATA[<p>Für Setzen:</p>
<p>c |= (1 &lt;&lt; position)</p>
<p>Für Löschen:</p>
<p>c &amp;= ~(1 &lt;&lt; position)</p>
<p>Für Lesen:</p>
<p>v = (c &gt;&gt; position) &amp; 1</p>
<p>Man muss halt mit Big und Little Endian aufpassen. D.h. diese Lösung ist nicht portabel, glaub ich. Aber weiß ich nicht so genau.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023719</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:27:09 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:34:15 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Für Setzen:</p>
<p>c |= (1 &lt;&lt; position)</p>
<p>Für Löschen:</p>
<p>c &amp;= ~(1 &lt;&lt; position)</p>
<p>Für Lesen:</p>
<p>v = (c &gt;&gt; position) &amp; 1</p>
<p>Man muss halt mit Big und Little Endian aufpassen. D.h. diese Lösung ist nicht portabel, glaub ich. Aber weiß ich nicht so genau.</p>
</blockquote>
<p>Hallo Eisflamme,</p>
<p>die Endianess spielt hier absolut gar keine Rolle, da es sich nur um ein einzelnes Byte handelt. Im übrigen gilt in der Netzwerkprogrammierung eh die Network-Byte-Order.</p>
<p>Mir geht es einfach darum, das ich möglichst geschickt an die von mir beschrieben Bits komme, um sie lesen und setzen zu können. Bei der Zahl 16 reicht es z.B. nicht, wenn ich nur ein Bit setze oder lese, da mehrere Bits zur Darstellung notwendig sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023728</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:49:19 GMT]]></title><description><![CDATA[<p>Um ein einzelnes Bit zu lesen, kannst du das Byte nach rechts shiften und dann mit 1 verknüpfen:</p>
<pre><code class="language-cpp">(byte &gt;&gt; 3) &amp; 1; // Ergibt Bit 3
</code></pre>
<p>Um mehrere Bit zu bekommen musst du deine Bitmaske so ändern, dass dort alle Bits gesetzt sind, die du aus dem Byte haben willst:</p>
<pre><code class="language-cpp">(byte &gt;&gt; 2) &amp; ((1 &lt;&lt; 2) | (1 &lt;&lt; 3) | ......); // Ergibt die Bits 4(2+2) und 5(2+3)
</code></pre>
<p>Zum setzen eines bestimmten Bits nimmst du das Bitweis-Oder:</p>
<pre><code class="language-cpp">byte |= (1 &lt;&lt; 3); // Setzt das dritte Bit
</code></pre>
<p>Zum setzen mehrerer Bits:</p>
<pre><code class="language-cpp">byte |= ((1 &lt;&lt; 2) | (1 &lt;&lt; 5) | ......); // Setzt die Bits 2 und 5
</code></pre>
<p>Zum Löschen eines Bits:</p>
<pre><code class="language-cpp">byte &amp;= ~(1 &lt;&lt; 2); // Löscht Bit 2
</code></pre>
<p>Mehrere Bits löschen:</p>
<pre><code class="language-cpp">byte &amp;= ~((1 &lt;&lt; 4) | (1 &lt;&lt; 5) | ......); // Löscht Bits 4 und 5
</code></pre>
<p>Ein Byte &quot;flippen&quot;:</p>
<pre><code class="language-cpp">byte ^= (1 &lt;&lt; 4); // Flippt Bit 4
</code></pre>
<p>Flippen mehrerer Bits:</p>
<pre><code class="language-cpp">byte ^= ((1 &lt;&lt; 2) | (1 &lt;&lt; 6) | ......); // Flippt Bits 2 und 6
</code></pre>
<p>Hoffe das ist jetzt richtig so, ist ungetestet.<br />
Vergiss aber nicht, dass du bei 0 zu zählen anfängst. <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/2023731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023731</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:37:54 GMT]]></title><description><![CDATA[<p>&lt;rampage&gt;<br />
Na dann mach doch das entsprechende für mehrere Bits. Ich raffs nicht... dafür sind doch Masken etc da.<br />
Ich hasse es, wenn jemand mit soner Simpelfrage ankommt und dann gut gemeinten Rat mit Klugscheißerei abschmettert.<br />
Und klar spielt die Endianness hier eine Rolle, nämlich auf welcher Seite der Anpassung du die Bitsachen betreibst.<br />
&lt;/rampage&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023732</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:37:54 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:52:06 GMT]]></title><description><![CDATA[<p>Decimad schrieb:</p>
<blockquote>
<p>&lt;rampage&gt;<br />
Na dann mach doch das entsprechende für mehrere Bits. Ich raffs nicht... dafür sind doch Masken etc da.<br />
Ich hasse es, wenn jemand mit soner Simpelfrage ankommt und dann gut gemeinten Rat mit Klugscheißerei abschmettert.<br />
Und klar spielt die Endianness hier eine Rolle, nämlich auf welcher Seite der Anpassung du die Bitsachen betreibst.<br />
&lt;/rampage&gt;</p>
</blockquote>
<p>Varriert etwa auch die Reihenfolge der Bits auf unterschiedlichen Systemen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023740</guid><dc:creator><![CDATA[MrBadBoy]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:52:06 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:53:08 GMT]]></title><description><![CDATA[<p>Es soll auch Systeme geben, die nicht 8 Bit haben <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2023741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023741</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:53:08 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:55:21 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Es soll auch Systeme geben, die nicht 8 Bit haben <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>
</blockquote>
<p>Ja, das ist klar. Trotzdem sollte man es mit Portabilität nicht übetreiben. Mein Programm hat auf einem Toaster schließlich nichts zu suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023742</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:55:21 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 14:58:29 GMT]]></title><description><![CDATA[<p>Nur mal so als Anmerkung:<br />
Was zum Geier erhofft man sich davon!?!?<br />
Mit DSL Anschlüssen ein paar bytes zu senden ist nun wirklich kein Aufwand - da muss man nicht mit bits rumfrickeln <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/2023744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023744</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:58:29 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 15:00:07 GMT]]></title><description><![CDATA[<p>Wenn du nicht zu den leidgeplagten Programmieren gehörst, die schneller Essen können als der Toaster toasten, siehst du das natürlich ganz anders <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/2023746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023746</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 20 Feb 2011 15:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 15:19:23 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Nur mal so als Anmerkung:<br />
Was zum Geier erhofft man sich davon!?!?<br />
Mit DSL Anschlüssen ein paar bytes zu senden ist nun wirklich kein Aufwand - da muss man nicht mit bits rumfrickeln <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>
</blockquote>
<p>Es ist letztendlich auch einfach eine Übung, da ich mich im Umgang mit Bits nicht so sicher fühle - und das zu recht, wie man sieht.</p>
<p>Ich hatte nun folgende Idee um an die entsprechenden Werte zu kommen:</p>
<blockquote>
<p>c = 255</p>
<p>c &amp; 0x1F; // Bitmaske 00011111 [ ergibt 31]<br />
c &amp; 0x60; // Bitmaske 01100000 [ ergibt 96]<br />
c &amp; 0x80; // Bitmaske 10000000 [ ergibt true]</p>
</blockquote>
<p>Der erste Wert erscheint mir absolut plausibel, aber leider kommen bei den folgenden Operationen nicht die Werte raus, die ich erwarten würde. So ergibt die zweite Operation als Ergebnis 96, was nicht sein kann, da ich mit 2 Bits die Zahl 96 gar nicht darstellen kann. Hier läuft also etwas schief.</p>
<p>Wäre über Hilfe sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023755</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 15:19:23 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 15:21:01 GMT]]></title><description><![CDATA[<p>Ich habe dir doch gesagt, wie du das machen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023756</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 20 Feb 2011 15:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 15:25:00 GMT]]></title><description><![CDATA[<p>Mit &amp; maskierst du nur die Bits, du veränderst aber nicht ihre Wertigkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023758</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 20 Feb 2011 15:25:00 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 15:33:27 GMT]]></title><description><![CDATA[<p>Es leuchtet mir einfach nicht ein.</p>
<p>(byte &gt;&gt; 2) &amp; ((1 &lt;&lt; 2) | (1 &lt;&lt; 3) | ......); // Ergibt die Bits 4(2+2) und 5(2+3)</p>
<p>Wozu ist das byte &gt;&gt; 2 und warum 2 + 2 und 2 + 3?</p>
<p>Ich komme einfach nicht dahinter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023761</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 15:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 15:44:01 GMT]]></title><description><![CDATA[<p>ghjghj schrieb:</p>
<blockquote>
<p>...</p>
<p>Ich hatte nun folgende Idee um an die entsprechenden Werte zu kommen:</p>
<blockquote>
<p>c = 255</p>
<p>c &amp; 0x1F; // Bitmaske 00011111 [ ergibt 31]<br />
c &amp; 0x60; // Bitmaske 01100000 [ ergibt 96]<br />
c &amp; 0x80; // Bitmaske 10000000 [ ergibt true]</p>
</blockquote>
<p>Der erste Wert erscheint mir absolut plausibel, aber leider kommen bei den folgenden Operationen nicht die Werte raus, die ich erwarten würde. So ergibt die zweite Operation als Ergebnis 96, was nicht sein kann, da ich mit 2 Bits die Zahl 96 gar nicht darstellen kann. Hier läuft also etwas schief.</p>
<p>Wäre über Hilfe sehr dankbar.</p>
</blockquote>
<pre><code>c &amp; 0x60; // Bitmaske 01100000 [ ergibt 96]
// ((c &amp; 0x60)&gt;&gt;5) == 3
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023764</guid><dc:creator><![CDATA[einGast]]></dc:creator><pubDate>Sun, 20 Feb 2011 15:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 15:45:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">unsigned char gepackt; // &lt;- Dein Konstrukt
unsigned char echt;

// Lesen:
// 0-4
echt = gepackt &amp; 0x1F;
// 5-6
echt = (gepackt &gt;&gt; 5) &amp; 0x03;
// 7
echt = gepackt &gt;&gt; 7;

// Setzen:
// 0-4
gepackt = (gepackt &amp; 0xE0) | echt; // zur Sicherheit auch: &quot;| (echt &amp; 0x1f)&quot;
// 5-6
gepackt = (gepackt &amp; 0x9F) | (echt &lt;&lt; 5); // zur Sicherheit auch: &quot;| ((echt &amp; 0x03) &lt;&lt; 5)&quot;
// 7
gepackt = (gepackt &amp; 0xEF) | (echt &lt;&lt; 7); // zur Sicherheit auch: &quot;| ((echt &amp; 0x01) &lt;&lt; 7)&quot;
</code></pre>
<p>Unsigned ist wichtig für's Rechtsshiften.</p>
<p>Hab's nicht getestet. Hoffe, es stimmt alles.<br />
Aber vielleicht gehts ja noch einfacher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023765</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Sun, 20 Feb 2011 15:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 15:53:02 GMT]]></title><description><![CDATA[<p>Für das erste Ding brauchst du ab dem ersten Bit fünf Stück:<br />
(c&gt;&gt;<strong>0</strong>) &amp; ((1&lt;&lt;<strong>5</strong>)-1)</p>
<p>Für das zweite Ding brauchst du ab dem sechsten Bit zwei Stück:<br />
(c&gt;&gt;<strong>5</strong>) &amp; ((1&lt;&lt;<strong>2</strong>)-1)</p>
<p>Für das dritte brauchst du ab dem achten Bit eins:<br />
(c&gt;&gt;<strong>7</strong>) &amp; ((1&lt;&lt;<strong>1</strong>)-1)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023772</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Sun, 20 Feb 2011 15:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 16:25:18 GMT]]></title><description><![CDATA[<p>Ich das nun der Einfachheit mal mit nur 2 Werten versucht. Das Auslesen klappt sehr gut, aber das setzen nicht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#define MASK_BIT1 (1 &lt;&lt; 0 | 1 &lt;&lt; 1 | 1 &lt;&lt; 2 | 1 &lt;&lt; 3 | 1 &lt;&lt; 4)
#define MASK_BIT2 (1 &lt;&lt; 0 | 1 &lt;&lt; 1 | 1 &lt;&lt; 2)

int get_bits1(unsigned char c)
{
	// Start: 11111111

		     // =&gt; 76543210
	c &gt;&gt;= 3; // =&gt; 00011111

	return c &amp; MASK_BIT1;
}

int get_bits2(unsigned char c)
{
	// Start: 11111111

			 // =&gt; 76543210
	c &gt;&gt;= 5; // =&gt; 00000111

	return c &amp; MASK_BIT2;
}

void set_bits1(unsigned char&amp; c, unsigned char val)
{
	// Start: 
	//	c = 00000000
	//	val = 00011111

	c = (val &amp; MASK_BIT1) | (c &lt;&lt; 3); // ???
}

void set_bits2(unsigned char&amp; c, unsigned char val)
{
}

int main()
{
	unsigned char c = 0;

	set_bits1(c, 24);
	set_bits2(c, 6);

	std::cout &lt;&lt; get_bits1(c) &lt;&lt; std::endl;
	std::cout &lt;&lt; get_bits2(c) &lt;&lt; std::endl;

	return 0;
}
</code></pre>
<p>Ich würde gerne den Wert von val in die entsprechenden Bits schreiben. Leider kommen nicht wieder die Werte raus, die ich übergeben habe. Ich hatte es einmal geschafft, das zumindest set_bits1 klappt, aber set_bits2 hat die Werte wieder kaputt gemacht. Ich hab jetzt so viele Varianten ausprobiert... Hier fehlt mir wieder das Verständnis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023790</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 16:25:18 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 16:40:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void set_bits1(unsigned char&amp; c, unsigned char val)
{
    c |= val;
}

void set_bits2(unsigned char&amp; c, unsigned char val)
{
    c |= val&lt;&lt;5;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2023795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023795</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Sun, 20 Feb 2011 16:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 16:45:04 GMT]]></title><description><![CDATA[<p>Da kommen leider auch nicht die korrekten Werte bei raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023798</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 16:45:04 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 17:38:51 GMT]]></title><description><![CDATA[<p>Ich kriegs einfach nicht hin... Den ersten Wert kriege ich meistens noch gesetzt, aber sobald ich den zweiten setze manipuliert dies den ersten...</p>
<p>Es ist zum Heulen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023831</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 17:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 17:39:56 GMT]]></title><description><![CDATA[<p>ghjghj schrieb:</p>
<blockquote>
<p>Zugreifen möchte ich im Byte auf folgende Bits:<br />
Bit 1-5 (Wertbereich 0-32)<br />
Bit 6-7 (Wertbereich 0-4)<br />
Bit 8 (Wertbereich 0-1)</p>
</blockquote>
<p>FALSCH!</p>
<p>Bit 0-4 (Wertbereich 0-31)<br />
Bit 5-6 (Wertbereich 0-3)<br />
Bit 7 (Wertbereich 0-1)</p>
<pre><code class="language-cpp">int main()
{
	unsigned char bit0bis4 = 31, bit5und6 = 2, bit7 = 1;

	unsigned char gepackt;

	gepackt = bit0bis4 | bit5und6&lt;&lt;5 | bit7&lt;&lt;7; // alle eingepackt

	bit0bis4 = gepackt&amp;0x1f;           // bit0bis4 ausgepackt
	bit5und6 = (gepackt&amp;0x60)&gt;&gt;5;      // bit5und6 ausgepackt
	bit7 = gepackt&gt;&gt;7;                 // bit7 ausgepackt
	return 0;
}
</code></pre>
<p><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/2023832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023832</guid><dc:creator><![CDATA[einGast]]></dc:creator><pubDate>Sun, 20 Feb 2011 17:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 17:46:08 GMT]]></title><description><![CDATA[<p>Oh, du hast natürlich recht mit den Wertbereichen. Ich hab die 0 zwar hingeschrieben, aber beim Zählen nicht beachtet. Dein Beispiel ist jedenfalls echt super. Könntest du mir das auch noch auf mein anderes Beispiel umsetzen?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#define MASK_BIT1 (1 &lt;&lt; 0 | 1 &lt;&lt; 1 | 1 &lt;&lt; 2 | 1 &lt;&lt; 3 | 1 &lt;&lt; 4)
#define MASK_BIT2 (1 &lt;&lt; 0 | 1 &lt;&lt; 1 | 1 &lt;&lt; 2)

int get_bits1(unsigned char c)
{
    // Start: 11111111

             // =&gt; 76543210
    c &gt;&gt;= 3; // =&gt; 00011111

    return c &amp; MASK_BIT1;
}

int get_bits2(unsigned char c)
{
    // Start: 11111111

             // =&gt; 76543210
    c &gt;&gt;= 5; // =&gt; 00000111

    return c &amp; MASK_BIT2;
}

void set_bits1(unsigned char&amp; c, unsigned char val)
{
 // ???
}

void set_bits2(unsigned char&amp; c, unsigned char val)
{
 // ???
}

int main()
{
    unsigned char c = 0;

    set_bits1(c, 24);
    set_bits2(c, 6);

    std::cout &lt;&lt; get_bits1(c) &lt;&lt; std::endl;
    std::cout &lt;&lt; get_bits2(c) &lt;&lt; std::endl;

    return 0;
}
</code></pre>
<p>Das Auslesen habe ich inzwischen hinbekommen, aber beim Setzen hapert es. Es ist mir einfach nicht klar, wie ich es schaffe die entsprechenden Bits zu setzen ohne die anderen Bits zu beeinflussen und damit die anderen Werte zu verfälschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023838</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sun, 20 Feb 2011 17:46:08 GMT</pubDate></item><item><title><![CDATA[Reply to Spaß mit Bits on Sun, 20 Feb 2011 17:52:44 GMT]]></title><description><![CDATA[<p>Zeig' doch mal Deinen aktuellen Code - also nicht den von eben, sondern den, der &quot;die anderen Bits beeinflußt&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023841</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Sun, 20 Feb 2011 17:52:44 GMT</pubDate></item></channel></rss>