<?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[Binärdarstellung]]></title><description><![CDATA[<p>Huhu,folgendes Problem:Aus einer vom Benutzer einzugebenden Zahl soll ich nacheinander die einzelnen Bits ausgeben und dazu nur Bit Operatoren verwenden..</p>
<pre><code>#include &lt;iostream&gt;
using namespace:.std;
int main()
{
int x ;
cout&lt;&lt;&quot;Bitte Zahl eingeben&quot;&lt;&lt;endl;
cin&gt;&gt;x;
for(int offset = 0; offset &lt; sizeof(x) * 8; ++offset){
cout &lt;&lt; (x &amp; 0x1);
x = x &gt;&gt; 1;
}
</code></pre>
<p>funktioniert soweit auch,aber er gibt mir die Bits nun in umgekehrter Reihenfolge aus...zudem soll das ganze eigentlich ohne sizeof sondern nur über Schiebeoperationn gelöst werden...jemand nen Ansatz parat?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286179/binärdarstellung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 00:50:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286179.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 May 2011 21:41:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 21:47:12 GMT]]></title><description><![CDATA[<p>Huhu,folgendes Problem:Aus einer vom Benutzer einzugebenden Zahl soll ich nacheinander die einzelnen Bits ausgeben und dazu nur Bit Operatoren verwenden..</p>
<pre><code>#include &lt;iostream&gt;
using namespace:.std;
int main()
{
int x ;
cout&lt;&lt;&quot;Bitte Zahl eingeben&quot;&lt;&lt;endl;
cin&gt;&gt;x;
for(int offset = 0; offset &lt; sizeof(x) * 8; ++offset){
cout &lt;&lt; (x &amp; 0x1);
x = x &gt;&gt; 1;
}
</code></pre>
<p>funktioniert soweit auch,aber er gibt mir die Bits nun in umgekehrter Reihenfolge aus...zudem soll das ganze eigentlich ohne sizeof sondern nur über Schiebeoperationn gelöst werden...jemand nen Ansatz parat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058713</guid><dc:creator><![CDATA[Enfi]]></dc:creator><pubDate>Wed, 04 May 2011 21:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 21:49:00 GMT]]></title><description><![CDATA[<p>Du könntest die for-Schleife durch ein <code>while(x&gt;0)</code> ersetzen, dann fällt das sizeof weg. Wenn du die Bits von oben ausgeben willst, mußt du die Schleife in der anderen Richtung durchlaufen und die einzelnen Bits per &amp; und &gt;&gt; extrahieren.</p>
<p>PS: std::bitset&lt;&gt; ist keine Option, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058716</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 May 2011 21:49:00 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 21:51:01 GMT]]></title><description><![CDATA[<p>Nein,leider nicht <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/2058718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058718</guid><dc:creator><![CDATA[Enfi]]></dc:creator><pubDate>Wed, 04 May 2011 21:51:01 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 21:55:30 GMT]]></title><description><![CDATA[<p>Versteh aber leider auch nicht ganz,wie du das meinst ):</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058719</guid><dc:creator><![CDATA[Enfi]]></dc:creator><pubDate>Wed, 04 May 2011 21:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 22:00:28 GMT]]></title><description><![CDATA[<p>Andersrum schaffe ich's schon.</p>
<pre><code class="language-cpp">for(int offset = sizeof(x) * 8 - 1 ; offset &gt;= 0; --offset){
    cout &lt;&lt; ((x&gt;&gt;offset) &amp; 0x1);
</code></pre>
<p>Aber das sizeof kriege ich so nicht weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058722</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 04 May 2011 22:00:28 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 22:06:33 GMT]]></title><description><![CDATA[<p>Du kannst mit <code>(x &amp; (1&lt;&lt;n))&gt;&gt;n</code> (Edit: Wobei volkards Lösung besser ist) die n-te Binärziffer von x herausholen. Das mußt du nur noch in deiner Schleife einbauen und kannst je nach Bedarf von oben oder von unten alle Ziffern ausgeben.<br />
(wenn du ohne sizeof auskommen willst, ist es schwieriger die höchste Ziffer der Ausgabe zu bestimmen)</p>
<p>Eine Alternative wäre es noch, die Ausgabe erst in einem String zwischenzuspeichern und dann rückwärts wieder auszugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058725</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 May 2011 22:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 22:15:37 GMT]]></title><description><![CDATA[<p>Auch sizeof kann ich loswerden, aber dann ist es wieder verdreht.</p>
<pre><code class="language-cpp">for(unsigned int maske = 1 ; maske != 0; maske&lt;&lt;=1 )
   if(x&amp;maske)
    cout &lt;&lt; 1; 
   else
    cout &lt;&lt; 0;
</code></pre>
<p>Vielleicht kann man auf recht zuverlässige Weise, ja klar.</p>
<pre><code class="language-cpp">for(unsigned int maske = ~0u&gt;&gt;1^~0u; ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2058726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058726</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 04 May 2011 22:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 22:20:43 GMT]]></title><description><![CDATA[<p>klingt beides sehr kompliziert,ich verwende einfach mal meine Lösung inkl. der umgekehrten for Schleife,sollte ausreichen^^</p>
<p>wobei ich doch anstatt sizeof(x)*8-1 auch einfach int offset=32(31?) nehmen könnte oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058729</guid><dc:creator><![CDATA[Enfi]]></dc:creator><pubDate>Wed, 04 May 2011 22:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 22:26:35 GMT]]></title><description><![CDATA[<p>Klar könntest du, aber niemand garantiert dir, daß ein int wirklich 32 Bit groß ist.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Die letzte Lösung ist wohl ideal - und für einen Anfänger absolut unverständlich <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/2058730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058730</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 May 2011 22:26:35 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 22:44:38 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Die letzte Lösung ist wohl ideal - und für einen Anfänger absolut unverständlich <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, Enfi hat sie schon abgelehnt. *heul*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2058733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058733</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 04 May 2011 22:44:38 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 22:45:58 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(x&amp;maske)
    cout &lt;&lt; 1; 
   else
    cout &lt;&lt; 0;
</code></pre>
</blockquote>
<pre><code class="language-cpp">cout &lt;&lt; !!(x&amp;maske);
</code></pre>
<p>Wenn wir schon dabei sind <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/2058734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058734</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 04 May 2011 22:45:58 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 22:59:46 GMT]]></title><description><![CDATA[<p>naja,so schwer zu verstehen ist es auch nicht <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/2058738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058738</guid><dc:creator><![CDATA[Enfi]]></dc:creator><pubDate>Wed, 04 May 2011 22:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdarstellung on Wed, 04 May 2011 23:47:45 GMT]]></title><description><![CDATA[<p>Ich schlage Rekursion vor:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void print_binary(unsigned x) {
  if(x != 0) {
    print_binary(x &gt;&gt; 1);
    std::cout &lt;&lt; (x &amp; 1);
  }
}
</code></pre>
<p>Ansonsten kann man den sizeof-Kram auch durch</p>
<pre><code class="language-cpp">std::numeric_limits&lt;unsigned&gt;::digits
</code></pre>
<p>ersetzen (Header &lt;limits&gt;). Man kann auch wie folgt ein Bit über den int laufen lassen:</p>
<pre><code class="language-cpp">void print_binary(unsigned x) {
  for(unsigned mask = ~(~0u &gt;&gt; 1); mask; mask &gt;&gt;= 1) {
    std::cout &lt;&lt; ((x &amp; mask) ? '1' : '0');
  }
}
</code></pre>
<p>Das dürfte etwa das sein, was Volkard sich vorgestellt hat. mit ein bisschen Umstand lässt sich das auch optisch angenehm gestalten (will sagen, ohne führende Nullen):</p>
<pre><code class="language-cpp">void print_binary(unsigned x) {
  unsigned mask = ~(~0u &gt;&gt; 1);

  for(; (x &amp; mask) == 0 &amp;&amp; mask != 0; mask &gt;&gt;= 1);
  for(;                    mask != 0; mask &gt;&gt;= 1) {
    std::cout &lt;&lt; ((x &amp; mask) ? '1' : '0');
  }
}
</code></pre>
<p>Schlussendlich finden sich <a href="http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious" rel="nofollow">hier</a> verschiedene Hacks, das höchste gesetzte Bit schneller zu finden als oben gezeigt; diese sind allerdings plattformabhängig.</p>
<p>Der Sonderfall x == 0 ist trivial ranzupatchen; ich belasse ihn als Aufgabe für den Leser. <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/2058745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2058745</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 04 May 2011 23:47:45 GMT</pubDate></item></channel></rss>