<?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-Verschiebung]]></title><description><![CDATA[<p>Hi<br />
Ich suche eine einfache und schnelle Möglichkeit zwischen jeweils 2 Bits in einem Wort ein zusätzliches Bit einzufügen.<br />
Z.B: 11001 soll zu 10 10 00 00 10 werden<br />
Also praktisch an jeder zweiten Stelle beginnend bei der ersten eine 0 einfügen.<br />
Das ganze bräuchte ich dann auch noch für jede zweite Stelle beginnend bei der zweiten. (11001 = 01 01 00 00 01)<br />
Die zwei Ergebnisse sollen dann später verodert werden.</p>
<p>Hat da einer eine Idee?</p>
<p>Gruß<br />
rean</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/172947/bit-verschiebung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 03:28:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172947.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Feb 2007 00:12:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bit-Verschiebung on Sat, 10 Feb 2007 00:12:17 GMT]]></title><description><![CDATA[<p>Hi<br />
Ich suche eine einfache und schnelle Möglichkeit zwischen jeweils 2 Bits in einem Wort ein zusätzliches Bit einzufügen.<br />
Z.B: 11001 soll zu 10 10 00 00 10 werden<br />
Also praktisch an jeder zweiten Stelle beginnend bei der ersten eine 0 einfügen.<br />
Das ganze bräuchte ich dann auch noch für jede zweite Stelle beginnend bei der zweiten. (11001 = 01 01 00 00 01)<br />
Die zwei Ergebnisse sollen dann später verodert werden.</p>
<p>Hat da einer eine Idee?</p>
<p>Gruß<br />
rean</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1226015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1226015</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Sat, 10 Feb 2007 00:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to Bit-Verschiebung on Sat, 10 Feb 2007 00:17:33 GMT]]></title><description><![CDATA[<p>auf die schnelle würd mir jetz einfallen das du deine zahl zerlegst<br />
dann zu jedem etwas hinzufügst und zum schluss wieder alles zusammen-<br />
hängen.</p>
<p>gibt bestimmt ncoh leichteres aber das fiel mir grad so ein <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/1226017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1226017</guid><dc:creator><![CDATA[Dj_KoLoGe]]></dc:creator><pubDate>Sat, 10 Feb 2007 00:17:33 GMT</pubDate></item><item><title><![CDATA[Reply to Bit-Verschiebung on Sat, 10 Feb 2007 00:22:00 GMT]]></title><description><![CDATA[<p>Ja soweit war ich natürlich auch schon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
Aber ich muss das mit 300000 Bytes und mehr machen. Und da wäre das Auseinander- und wieder Zusammenfriemeln doch recht zeitaufwändig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1226018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1226018</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Sat, 10 Feb 2007 00:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to Bit-Verschiebung on Sat, 10 Feb 2007 00:24:46 GMT]]></title><description><![CDATA[<p>wie wärs in nen string casten oder so und dann per<br />
substring und % vllt einfach ein zeichen adden und dann<br />
wieder casten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1226021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1226021</guid><dc:creator><![CDATA[Dj_KoLoGe]]></dc:creator><pubDate>Sat, 10 Feb 2007 00:24:46 GMT</pubDate></item><item><title><![CDATA[Reply to Bit-Verschiebung on Sat, 10 Feb 2007 01:22:23 GMT]]></title><description><![CDATA[<p>Für sowas würde ich auf jeden Fall einen Lookup-Table verwenden. Wenn die CPU auf der das laufen soll einen L1 Cache von &gt;= 1kb hat würde ich einfach einen 8 Bit -&gt; 16 Bit Table verwenden.<br />
Dann brauchst du deine Daten bloss noch Byteweise durchzugehen.</p>
<p>Wie du den Table dabei erstellst ist ziemlich egal, da du das bloss 1x machst -- und 256x eine etwas umstäncliche Rechnung durchzuführen damit man dann 300.000x einen schnellen Table-Lookup verwenden kann... sollte denke ich OK sein.</p>
<p>EDIT: wenn du die beiden Zwischenergebnisse nicht brauchst, dann mach gleich alles in einem Schritt, also so dass im Lookup-Table gleich das Endresultat mit den &quot;verdoppelten Bits&quot; drinnen steht. Macht ja keinen Sinn das in 3 Schritten zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1226028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1226028</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 10 Feb 2007 01:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Bit-Verschiebung on Sun, 11 Feb 2007 08:06:30 GMT]]></title><description><![CDATA[<p>rean schrieb:</p>
<blockquote>
<p>Hi<br />
Ich suche eine einfache und schnelle Möglichkeit zwischen jeweils 2 Bits in einem Wort ein zusätzliches Bit einzufügen.<br />
Z.B: 11001 soll zu 10 10 00 00 10 werden<br />
Also praktisch an jeder zweiten Stelle beginnend bei der ersten eine 0 einfügen.<br />
Das ganze bräuchte ich dann auch noch für jede zweite Stelle beginnend bei der zweiten. (11001 = 01 01 00 00 01)<br />
Die zwei Ergebnisse sollen dann später verodert werden.</p>
<p>Hat da einer eine Idee?</p>
<p>Gruß<br />
rean</p>
</blockquote>
<p>Hi!<br />
Wie wärs mit Inline-Assembler?</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

void bit2zero (unsigned int* dest, unsigned short* src, size_t count)   
{    
_asm{
            mov     esi, src
            mov     edi, dest
            mov     ecx, count
            shl     ecx, 4
            jmp L0  
        align 16    
        L0 :    
            lodsw
            shrd    ebx, eax, 16
        L1 :
            shld    eax, ebx, 1 //1&lt;&lt; Diese zwei Befehle stehen für x 0 (1 0 od. 0 0)
            dec     ecx
            shl     eax, 1      //2&lt;&lt; wenn du die vertauschst bekommst du  0 x
            shl     ebx, 1         
            test    cl, 01111b     
            jnz L1                  
            stosd
            or      ecx, ecx
            jne L0
    }
}

int main() 
{ 
    unsigned short src[75000];
    unsigned int   dest[75000];   

        src[74999] = 0xffff;

        bit2zero (dest, src, 75000);

   unsigned int test = dest[74999]; 
// test = 2863311530 binary = 10101010101010101010101010101010
}
</code></pre>
<p>Am einfachsten ist es, wenn du ein Ergebnis im Speicher vorliegen hast,<br />
darauf den Befehl ror oder rol dword ptr[dest], 1 anzuwenden. (d.h. logisch shiften in C/C++)<br />
Das zweite Ergebnis liegt dann sofort vor.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1226049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1226049</guid><dc:creator><![CDATA[Helmut S.]]></dc:creator><pubDate>Sun, 11 Feb 2007 08:06:30 GMT</pubDate></item><item><title><![CDATA[Reply to Bit-Verschiebung on Sat, 10 Feb 2007 08:31:11 GMT]]></title><description><![CDATA[<p>Es ist nie zu spät seine Sorgen nach hinten zu verschieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1226059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1226059</guid><dc:creator><![CDATA[Glückskeks]]></dc:creator><pubDate>Sat, 10 Feb 2007 08:31:11 GMT</pubDate></item></channel></rss>