<?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[Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar]]></title><description><![CDATA[<p>Hallo alle zusammen,</p>
<p>ich beschäftige mich seit Längerem mit dem binären Auslesen von Dateien.</p>
<p>Mein Ziel war es, per Knopfdruck jede Datei binär anzeigen lassen zu können.<br />
Doch jetzt ist meine erste Hürde das Umwandeln von Dezimalzahlen in Binärzahlen.<br />
Wer jetzt schon anfängt zu stöhnen den kann ich beruhigen... ich weiß wie man sie umwandelt! Mein Problem liegt im mathematischen Verständnis des Umwandelns:</p>
<p>Man nehme eine Dezimalzahl 73. Nun prüft man (modulo-operator) diese Zahl auf Teilbarkeit durch 2, wenn sie teilbar sein sollte --&gt; schreibe &quot;0&quot;, ansonsten &quot;1&quot;.<br />
73 --&gt; &quot;1&quot; --&gt; Rest 36 (Nachkommastellen entfallen ja)..<br />
36 --&gt; &quot;0&quot; --&gt; Rest 18<br />
18 --&gt; &quot;0&quot; --&gt; Rest 9<br />
9 --&gt; &quot;1&quot; --&gt; Rest 4<br />
4 --&gt; &quot;0&quot; --&gt; Rest 2<br />
2 --&gt; &quot;0&quot; --&gt; Rest 1<br />
1 --&gt; &quot;1&quot; --&gt; kein Rest mehr</p>
<p>Nun den Wert umkehren --&gt; 1001001 --&gt; fertig!</p>
<p>Aber WARUM geht das denn? Kann mir jemand mathematisch begründen, wieso ich 73 durch 2 teilen muss und dann eine &quot;1&quot; schreiben muss weil sie nicht durch 2 teilbar ist?? Ich weiß das erste Bit entscheidet ob die Zahl gerade oder ungerade ist also war das jetzt eben ein schlechtes Beispiel aber genauso bei der 9... wieso muss dann ne 1 geschrieben werden wenn 9 nicht durch 2 teilbar ist... das hat doch mit der eigentlichen Funktion der 1 (2^3) nicht das geringste zu tun....</p>
<p>Ich hoffe sehr dass mich da jemand erleuchten kann denn ich benutze nur ungern Algorithmen die ich nicht selbst verstehe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Viele Grüße<br />
Timmy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/249878/dezimal-gt-binär-mathematik-hinter-dem-algo-unklar</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 06:03:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/249878.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Sep 2009 14:38:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 14:38:26 GMT]]></title><description><![CDATA[<p>Hallo alle zusammen,</p>
<p>ich beschäftige mich seit Längerem mit dem binären Auslesen von Dateien.</p>
<p>Mein Ziel war es, per Knopfdruck jede Datei binär anzeigen lassen zu können.<br />
Doch jetzt ist meine erste Hürde das Umwandeln von Dezimalzahlen in Binärzahlen.<br />
Wer jetzt schon anfängt zu stöhnen den kann ich beruhigen... ich weiß wie man sie umwandelt! Mein Problem liegt im mathematischen Verständnis des Umwandelns:</p>
<p>Man nehme eine Dezimalzahl 73. Nun prüft man (modulo-operator) diese Zahl auf Teilbarkeit durch 2, wenn sie teilbar sein sollte --&gt; schreibe &quot;0&quot;, ansonsten &quot;1&quot;.<br />
73 --&gt; &quot;1&quot; --&gt; Rest 36 (Nachkommastellen entfallen ja)..<br />
36 --&gt; &quot;0&quot; --&gt; Rest 18<br />
18 --&gt; &quot;0&quot; --&gt; Rest 9<br />
9 --&gt; &quot;1&quot; --&gt; Rest 4<br />
4 --&gt; &quot;0&quot; --&gt; Rest 2<br />
2 --&gt; &quot;0&quot; --&gt; Rest 1<br />
1 --&gt; &quot;1&quot; --&gt; kein Rest mehr</p>
<p>Nun den Wert umkehren --&gt; 1001001 --&gt; fertig!</p>
<p>Aber WARUM geht das denn? Kann mir jemand mathematisch begründen, wieso ich 73 durch 2 teilen muss und dann eine &quot;1&quot; schreiben muss weil sie nicht durch 2 teilbar ist?? Ich weiß das erste Bit entscheidet ob die Zahl gerade oder ungerade ist also war das jetzt eben ein schlechtes Beispiel aber genauso bei der 9... wieso muss dann ne 1 geschrieben werden wenn 9 nicht durch 2 teilbar ist... das hat doch mit der eigentlichen Funktion der 1 (2^3) nicht das geringste zu tun....</p>
<p>Ich hoffe sehr dass mich da jemand erleuchten kann denn ich benutze nur ungern Algorithmen die ich nicht selbst verstehe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Viele Grüße<br />
Timmy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777632</guid><dc:creator><![CDATA[Timmyxx]]></dc:creator><pubDate>Sun, 13 Sep 2009 14:38:26 GMT</pubDate></item><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 15:18:52 GMT]]></title><description><![CDATA[<p>Timmyxx schrieb:</p>
<blockquote>
<p>Aber WARUM geht das denn? Kann mir jemand mathematisch begründen, wieso ich 73 durch 2 teilen muss und dann eine &quot;1&quot; schreiben muss weil sie nicht durch 2 teilbar ist??</p>
</blockquote>
<p>Modulo ist der Divisonsrest. Der Rest der bei einer Division übrig bleibt.<br />
Die 2 passt nur 36 mal in die 73 rein. 73 - 36 * 2 = 1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777652</guid><dc:creator><![CDATA[Rhombicosidodecahedron]]></dc:creator><pubDate>Sun, 13 Sep 2009 15:18:52 GMT</pubDate></item><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 15:22:34 GMT]]></title><description><![CDATA[<p>Ev. hilft Dir auch die Wikipedia Erklärung:<br />
<a href="http://de.wikipedia.org/wiki/Stellenwertsystem" rel="nofollow">http://de.wikipedia.org/wiki/Stellenwertsystem</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777655</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 13 Sep 2009 15:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 15:39:49 GMT]]></title><description><![CDATA[<p>Ok, ich versuchs mal:</p>
<p>Man nehme eine beliebige Zahl x, die sich auf folgende Weise darstellen lässt: x = a<sub>n</sub> * 2<sup>n</sup> + a<sub>n-1</sub> * 2<sup>n-1</sup> + a<sub>n-2</sub> * 2<sup>n-2</sup> + ... + a<sub>1</sub> * 2<sup>1</sup> + a<sub>0</sub> * 2<sup>0</sup>. Im Binärformat aufgeschrieben wäre x jetzt a<sub>n</sub>a<sub>n-1</sub>a<sub>n-2</sub>...a<sub>1</sub>a<sub>0</sub> (die Schreibweise ist sicher nicht mathematisch exakt, aber ich denke, du weißt, was ich meine). Die Frage ist also, wie bekommen wir auf mathematischem Wege die einzelnen Komponenten? Die Lösung: man untersucht, ob für x gilt, dass a<sub>0</sub> = 0. Das geht relativ einfach, nämlich mit x%2 == 0 (denn wenn a<sub>0</sub> ist, ist ja die Zahl durch 2 teilbar, da sie nur aus Zweiperpotenzen mit natürlichen Exponenten größer 0 besteht). Das heißt also, mit x%2 erhalten wir die letzte Ziffer der Zahl. Jetzt teilt man die Zahl ohne Rest durch 2. Das bedeutet, a<sub>0</sub> * 2<sup>0</sup> wird nicht beachtet, da das ja den Rest darstellt, und alle anderen Exponenten werden um 1 vermindert (2<sup>n</sup>/2 = 2<sup>n-1</sup>). Somit wird aus x = a<sub>n</sub> * 2<sup>n</sup> + a<sub>n-1</sub> * 2<sup>n-1</sup> + a<sub>n-2</sub> * 2<sup>n-2</sup> + ... + a<sub>1</sub> * 2<sup>1</sup> + a<sub>0</sub> * 2<sup>0</sup> folgendes: x div 2 = a<sub>n</sub> * 2<sup>n-1</sup> + a<sub>n-1</sub> * 2<sup>n-2</sup> + a<sub>n-2</sub> * 2<sup>n-3</sup> + ... + a<sub>1</sub> * 2<sup>0</sup>. Auf die selbe Weise wie vorhin (mit modulo 2) können wir nun a<sub>1</sub> herausfinden, also die vorletzte Stelle. Jetzt wieder restlose Division durch 2, womit diesmal a<sub>1</sub> * 2<sup>0</sup> rausfällt. Das ganze Spielchen wird wiederholt, bis wir a<sub>n</sub> rausgefunden haben. Jetzt wird bei der Division mit 2 die Zahl 0, womit der Algorithmus beendet ist. Die erhaltenen Ziffern müssen jetzt nur noch hintereinander geschrieben werden, wobei wir mit der letzten (a<sub>n</sub>) beginnen müssen (a<sub>0</sub>, was wir als erstes herausgefunden haben, steht dann richtigerweise am Ende).</p>
<p>Ich hoffe, das war verständlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777665</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 13 Sep 2009 15:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 16:02:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank für die zahlreichen Antworten!!</p>
<p>Doch so sehr ich mich bemühe es zu verstehen... ich raffe es einfach noch nicht!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>@XMaster:<br />
Ja den ersten Schritt verstehe ich auch noch... wir teilen 73 durch 2 --&gt; wir sehen es bleibt ein Rest übrig also brauchen wir die 1 (2^0).<br />
Dann bleiben doch noch 72 übrig... und wenn wir die durch 2 teilen dann sehen wir zwar, dass wir ne gerade Zahl haben aber wir sehen doch noch nicht automatisch dass wir später nicht vielleicht noch die Zahl 2 (2^1) brauchen oder?? Wieso können wir dann schon 0 an der Stelle 2^1 schreiben wenn wir gerade mal wissen, dass 72 durch 2 teilbar ist???</p>
<p>Versteht jemand mein Verständnisproblem??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777673</guid><dc:creator><![CDATA[Timmyxx]]></dc:creator><pubDate>Sun, 13 Sep 2009 16:02:18 GMT</pubDate></item><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 16:07:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank für die zahlreichen Antworten!!</p>
<p>Doch so sehr ich mich bemühe es zu verstehen... ich raffe es einfach noch nicht!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>@XMaster:<br />
Ja den ersten Schritt verstehe ich auch noch... wir teilen 73 durch 2 --&gt; wir sehen es bleibt ein Rest übrig also brauchen wir die 1 (2^0).<br />
Dann bleiben doch noch 72 übrig... und wenn wir die durch 2 teilen dann sehen wir zwar, dass wir ne gerade Zahl haben aber wir sehen doch noch nicht automatisch dass wir später nicht vielleicht noch die Zahl 2 (2^1) brauchen oder?? Wieso können wir dann schon 0 an der Stelle 2^1 schreiben wenn wir gerade mal wissen, dass 72 durch 2 teilbar ist???</p>
<p>Versteht jemand mein Verständnisproblem??</p>
<p>Ich verstehe einfach nicht was mir das sagt wenn ich die Zahl durch 2 teile... was bringt mir das??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777675</guid><dc:creator><![CDATA[Timmyxx]]></dc:creator><pubDate>Sun, 13 Sep 2009 16:07:31 GMT</pubDate></item><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 16:57:51 GMT]]></title><description><![CDATA[<p>Timmyxx schrieb:</p>
<blockquote>
<p>Ich verstehe einfach nicht was mir das sagt wenn ich die Zahl durch 2 teile... was bringt mir das??</p>
</blockquote>
<p>Versuch mal im Binärsystem zu denken.</p>
<p>Hier ist ein Beispiel mit allen Zahlen im Binärsystem ausgedrückt:</p>
<pre><code>Zahl    Unteres  Nach Division 
        Bit      durch Zwei
------------------------------
101010  &quot;0&quot;      10101
10101   &quot;1&quot;      1010
1010    &quot;0&quot;      101
101     &quot;1&quot;      10
10      &quot;0&quot;      1
1       &quot;1&quot;      0
</code></pre>
<p>Erklärung zum ersten Schritt: Der Modulooperator kann dir Verraten, welchen Wert das untere Bit hat. Dann gehts nur darum, alle Bits einen aufrücken zu lassen:</p>
<pre><code>( 1*32 + 0*16 + 1*8 + 0*4 + 1*2 + 0*1 ) / 2 =
   \____  \____ \____ \____ \____
        \      \     \     \     \
       ( 1*16 + 0*8 + 1*4 + 0*2 + 1*1 )
</code></pre>
<p>Division durch Zwei (mit Abrunden) im Binärsystem hat also den Effekt, dass alle Ziffern einen Schritt nach rechts wandern. Du hast das Problem um ein Bit reduzierst und kannst wieder von vorne anfangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777709</guid><dc:creator><![CDATA[zeitverdroedler]]></dc:creator><pubDate>Sun, 13 Sep 2009 16:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 20:25:28 GMT]]></title><description><![CDATA[<p>AHH! Super! Vielen Dank für diese ausführliche Erläuterung!!<br />
Das wusste ich ja gar nicht dass sich die Binärzahl bei Division durch 2 um eine Stelle nach rechts &quot;verschoben&quot; wird... Ist ja schon irgendwie ein &quot;cooler&quot; Trick!<br />
Wie kommt man auf sowas? Ich meine.. sowas fällt ja wohl nicht sofort auf oder?<br />
Es ist irgendwie ja logisch wenn bei einer Division durch 2 das niederste Bit &quot;wegfällt&quot;... aber je mehr ich versuche zu verstehen warum das letzte Bit wegfällt, desto mehr bin ich verwirrt :)... Schließlich prüft man ja stets die neue Zahl auf Teilbarkeit durch 2 und und belegt dann aber abhängig davon viel höherwertige Bits... Ich prüfe beispielsweise die 9 auf Teilbarkeit, sehe dass sie ungerade ist und schreibe folglich eine 1 für das Bit 2^3... ist schon irgendwie unlogisch auf der einen Seite aber auf der anderen Seite wiederum passt es dann doch wenn man das mit der &quot;Rechtsverschiebung&quot; mal weiß...</p>
<p>Ich belass es einfach dabei dass es so ist und somit habe ich auch verstanden wieso dieser Algo funktioniert xD</p>
<p>Vielen Dank!<br />
Timmyxx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777851</guid><dc:creator><![CDATA[Timmyxx]]></dc:creator><pubDate>Sun, 13 Sep 2009 20:25:28 GMT</pubDate></item><item><title><![CDATA[Reply to Dezimal --&amp;gt; Binär .. Mathematik hinter dem Algo unklar on Sun, 13 Sep 2009 20:52:42 GMT]]></title><description><![CDATA[<p>Timmyxx schrieb:</p>
<blockquote>
<p>Das wusste ich ja gar nicht dass sich die Binärzahl bei Division durch 2 um eine Stelle nach rechts &quot;verschoben&quot; wird... Ist ja schon irgendwie ein &quot;cooler&quot; Trick!<br />
Wie kommt man auf sowas? Ich meine.. sowas fällt ja wohl nicht sofort auf oder?</p>
</blockquote>
<p>Aus dem selben Grund wird auch eine Dezimalzahl &quot;nach rechts verschoben&quot;, wenn man durch 10 teilt und den Rest unterschlägt. Wie ich schon ausführte liegt das daran, dass z.B. eine Binärzahl die Form a<sub>n</sub> * 2<sup>n</sup> + a<sub>n-1</sub> * 2<sup>n-1</sup> + ... + a<sub>0</sub> * 2<sup>0</sup> hat. Wenn man jetzt durch 2 teilt, wird jeder einzelne Summand durch 2 geteilt, was zur Folge hat, dass der Exponent um 1 vermindert wird, d.h.:<br />
(a<sub>n</sub> * 2<sup>n</sup> + a<sub>n-1</sub> * 2<sup>n-1</sup> + ... + a<sub>1</sub> * 2<sup>1</sup> + a<sub>0</sub> * 2<sup>0</sup>) / 2 =<br />
a<sub>n</sub> * 2<sup>n</sup> / 2 + a<sub>n-1</sub> * 2<sup>n-1</sup> / 2 + ... + a<sub>1</sub> * 2<sup>1</sup> / 2 + a<sub>0</sub> * 2<sup>0</sup> / 2 =<br />
a<sub>n</sub> * 2<sup>n-1</sup> + a<sub>n-1</sub> * 2<sup>n-2</sup> + ... + a<sub>1</sub> * 2<sup>0</sup> + a<sub>0</sub> * 2<sup>-1</sup></p>
<p>Dabei wird a<sub>0</sub> * 2<sup>-1</sup> weggelassen, da das den Rest darstellt, übrig bleibt a<sub>n</sub> * 2<sup>n-1</sup> + a<sub>n-1</sub> * 2<sup>n-2</sup> + ... + a<sub>1</sub> * 2<sup>0</sup>, was einer Rechtsverschiebung entspricht (die letzte Ziffer, a<sub>0</sub>, gibt es nicht mehr).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1777865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1777865</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 13 Sep 2009 20:52:42 GMT</pubDate></item></channel></rss>