<?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[Bitweise Operatoren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss zur Zeit systemnah programmieren und würde gerne eure Meinung zu meinem Problem hören.</p>
<p>Ich habe zwei Werte 6 und 4. Beide müssen nun in ein unsigned short.</p>
<pre><code class="language-cpp">unsigned short ui1 = 6;
unsigned short ui2 = 4; 

unsigned short uiResult = (ui1 &lt;&lt; 4);
uiResult |= ui2;
</code></pre>
<p>Danach ist der Wert 100. Beim Herauslesen benutzte ich folgende Möglichkeit</p>
<pre><code class="language-cpp">unsigned short uiResult = 100;

unsigned short ui1 = (uiResult &gt;&gt; 4)
unsigned short ui2 = (uiResult &amp; 0x000F)
</code></pre>
<p>Gibt es Alternativen?</p>
<p>Gruß<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204615/bitweise-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 18:03:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204615.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Feb 2008 13:28:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bitweise Operatoren on Tue, 05 Feb 2008 13:28:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss zur Zeit systemnah programmieren und würde gerne eure Meinung zu meinem Problem hören.</p>
<p>Ich habe zwei Werte 6 und 4. Beide müssen nun in ein unsigned short.</p>
<pre><code class="language-cpp">unsigned short ui1 = 6;
unsigned short ui2 = 4; 

unsigned short uiResult = (ui1 &lt;&lt; 4);
uiResult |= ui2;
</code></pre>
<p>Danach ist der Wert 100. Beim Herauslesen benutzte ich folgende Möglichkeit</p>
<pre><code class="language-cpp">unsigned short uiResult = 100;

unsigned short ui1 = (uiResult &gt;&gt; 4)
unsigned short ui2 = (uiResult &amp; 0x000F)
</code></pre>
<p>Gibt es Alternativen?</p>
<p>Gruß<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1449742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1449742</guid><dc:creator><![CDATA[lord.hong]]></dc:creator><pubDate>Tue, 05 Feb 2008 13:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Bitweise Operatoren on Tue, 05 Feb 2008 13:40:52 GMT]]></title><description><![CDATA[<p>Unions?</p>
<pre><code class="language-cpp">union Word
{
    unsigned char bytes[2];
    unsigned short value;
};
</code></pre>
<p>Funktioniert natürlich nur wenn 2 * sizeof(char) == sizeof(short).</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1449759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1449759</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Tue, 05 Feb 2008 13:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to Bitweise Operatoren on Tue, 05 Feb 2008 17:46:42 GMT]]></title><description><![CDATA[<p>Was bezwechst du damit, die beiden halb-bytes in den short &quot;reinzustopfen&quot; und danach wieder rauszufummeln? Koennte man die Werte nicht genauso getrennt behandeln? Des weiteren kann uiresult zumindest in deinem Beispiel auch ein unsigned char sein. Wenn du mehrere solche Aktionen machen musst, bietet es sich evtl an, das hin-und hershiften in einer Klasse zu kapseln.<br />
(@Don: da er hier mit 4Bit-Werten hantiert und auch nur um 4 bits shiftet ist der Ansatz mit den bytes leider nicht unbedingt anwendbar)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1449991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1449991</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 Feb 2008 17:46:42 GMT</pubDate></item><item><title><![CDATA[Reply to Bitweise Operatoren on Tue, 05 Feb 2008 18:25:39 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Was bezwechst du damit, die beiden halb-bytes in den short &quot;reinzustopfen&quot; und danach wieder rauszufummeln?</p>
</blockquote>
<p>Synchronistation! <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>In diesem Fall sende ich an die Gegenstelle zwei Bytes. Einmal ein Zahl (Subframe) bis 10 (4 Bit) und eine Zahl (System Frame Number) bis 4095 (12 Bit) - also 16 Bits. Es gibt Schnittstellen, das zählt jedes Bit, z. Bsp. Mobilfunk (was ich vorher aber auch nicht wußte). <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/1450004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450004</guid><dc:creator><![CDATA[lord.hong]]></dc:creator><pubDate>Tue, 05 Feb 2008 18:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to Bitweise Operatoren on Tue, 05 Feb 2008 18:38:20 GMT]]></title><description><![CDATA[<p>Lies mal was über bitfields in deinem Buch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450009</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 05 Feb 2008 18:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to Bitweise Operatoren on Tue, 05 Feb 2008 18:52:47 GMT]]></title><description><![CDATA[<p>dann würde ich etwa folgendes als Ansatz nehmen:</p>
<pre><code class="language-cpp">struct Frames {
  unsigned char bytes[2]; //2 bytes reichen auch bei systemen mit sizeof(short) != 2
  void SetSubframe(unsigned short sf)
  {
    assert(sf &lt; 11);
    bytes[1] |= sf;
  }
  unsigned short GetSubframe()
  {
    return bytes[2] &amp; 0x0F;
  }

  void SetSysframe(unsigned short sf)
  {
    assert(sf &lt; 4096);
    bytes[0] = sf &gt;&gt; 4; //die ersten 8 bit
    bytes[1] |= (sf % 0x000F) &lt;&lt; 4; //die letzten 4 bit, geshiftet
  }
  unsigned short GetSysframe()
  {
    unsigned short sf = bytes[0];
    return (sf &lt;&lt; 4) | (bytes[1] &gt;&gt; 4);
  }
};
</code></pre>
<p>Die Gurus mögen mir verzeihen, wenn ich unsinn verzapfe. Bei den Zuweisungen von short an char sollten nur die letzten 8 bit belegt sein. Die struct müsstest du auch über eine C-API verschicken können, da das Layout in C das selbe ist (dort ohne die methoden definiert), wenn man keine virtuellen Methoden, keine Basisklasse und nur POD-member hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450014</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 Feb 2008 18:52:47 GMT</pubDate></item><item><title><![CDATA[Reply to Bitweise Operatoren on Tue, 05 Feb 2008 22:45:20 GMT]]></title><description><![CDATA[<p>eine kleine schönheitskorrektur für little endian systeme <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>
<pre><code class="language-cpp">void SetSubframe(unsigned short sf)
  {
     bytes[0] |= sf;
  }

  void SetSysframe(unsigned short sf)
  {
     bytes[1] = sf &gt;&gt; 4; //die ersten 8 bit
     bytes[0] |= (sf &amp; 0x000F) &lt;&lt; 4; //die letzten 4 bit, geshiftet
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1450150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450150</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Tue, 05 Feb 2008 22:45:20 GMT</pubDate></item></channel></rss>