<?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ärzahl zu Dezimalzahl?]]></title><description><![CDATA[<p>Ich versuch mich gerade an einem Programm, das eine einzugebende Binärzahl in eine Dezimalzahl umwandelt. Das klappt ja auch bestens. Zumindest so weit, bis ich am Ende der Zahl angekommen bin, denn mit</p>
<pre><code>Zahl % 10 = ziffer; Zahl /= 10;
</code></pre>
<p>kommt am Ende ja immer 0 raus. Aber die Null gehört ja zum Binärsystem.. Wie kann ich also das Programm dann beenden, wenn ich das Ende der Zahl errecith hab? Hier der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

double power(double x, int y)
{
    double temp = 1;
    while(y &gt; 0)
    {
        temp = temp * x;
        y--;
    }
    return temp;
}

int main()
{
    int binaerzahl;
    cout &lt;&lt; &quot;Gebe die Binaerzahl ein: &quot;;
    if(!(cin &gt;&gt; binaerzahl)) { cerr &lt;&lt; &quot;Fehler bei der Eingabe!\n&quot;; getch(); exit(2); }
    int letzteziffer, dezimalzahl = 0, anzahl_stellen = 0, zaehler = 0;
    while(zaehler &lt;= 100)
    {
        letzteziffer = binaerzahl % 10;
        binaerzahl /= 10;
        if(letzteziffer)
        {
            cout &lt;&lt; letzteziffer &lt;&lt; &quot;\n&quot;;
            getch();
            dezimalzahl += power(2, anzahl_stellen);
            ++zaehler;
            ++anzahl_stellen; //wegen den zweierpotenzen
        }

        else
        {
            /* ziffer gleich 0, 2^0 = 0
               aber wenn das ende von binaerzahl erreicht wurde, dann ist letzteziffer auch immer 0.. also: endlosschleife. umgewandelt = true?*/
            cout &lt;&lt; 0 &lt;&lt; &quot;\n&quot;;
            ++zaehler;
            ++anzahl_stellen;
            continue;
        }

    }
    cout &lt;&lt; dezimalzahl &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Zu Testzwecken lasse ich die Variable <code>letzteziffer</code> auch immer ausgeben. Wie also kann ich herausfinden, wann denn diese Zahl zuende ist? Danke schonmal für eure Hilfe!</p>
<p>Meine erste Idee wäre, die Schleife nur insgesamt 100 durchlaufen zu lassen, und sie dann zu beenden. Aber das ist ein wenig unschön.. Aber keine eingegebende Zahl kann und darf 100 Stellen oder noch mehr haben.</p>
<p>EDIT: Ich hab eben noch einen kleinen Fehler bei <code>anzahl_stellen</code> behoben (bei 0 wurde er vorher nicht erhöht). Sorry, hab ich ein wenig spät gemerkt. Ändert aber nichts an meinem vorherigem Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276950/binärzahl-zu-dezimalzahl</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:27:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276950.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Nov 2010 17:17:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Binärzahl zu Dezimalzahl? on Wed, 10 Nov 2010 17:25:42 GMT]]></title><description><![CDATA[<p>Ich versuch mich gerade an einem Programm, das eine einzugebende Binärzahl in eine Dezimalzahl umwandelt. Das klappt ja auch bestens. Zumindest so weit, bis ich am Ende der Zahl angekommen bin, denn mit</p>
<pre><code>Zahl % 10 = ziffer; Zahl /= 10;
</code></pre>
<p>kommt am Ende ja immer 0 raus. Aber die Null gehört ja zum Binärsystem.. Wie kann ich also das Programm dann beenden, wenn ich das Ende der Zahl errecith hab? Hier der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

double power(double x, int y)
{
    double temp = 1;
    while(y &gt; 0)
    {
        temp = temp * x;
        y--;
    }
    return temp;
}

int main()
{
    int binaerzahl;
    cout &lt;&lt; &quot;Gebe die Binaerzahl ein: &quot;;
    if(!(cin &gt;&gt; binaerzahl)) { cerr &lt;&lt; &quot;Fehler bei der Eingabe!\n&quot;; getch(); exit(2); }
    int letzteziffer, dezimalzahl = 0, anzahl_stellen = 0, zaehler = 0;
    while(zaehler &lt;= 100)
    {
        letzteziffer = binaerzahl % 10;
        binaerzahl /= 10;
        if(letzteziffer)
        {
            cout &lt;&lt; letzteziffer &lt;&lt; &quot;\n&quot;;
            getch();
            dezimalzahl += power(2, anzahl_stellen);
            ++zaehler;
            ++anzahl_stellen; //wegen den zweierpotenzen
        }

        else
        {
            /* ziffer gleich 0, 2^0 = 0
               aber wenn das ende von binaerzahl erreicht wurde, dann ist letzteziffer auch immer 0.. also: endlosschleife. umgewandelt = true?*/
            cout &lt;&lt; 0 &lt;&lt; &quot;\n&quot;;
            ++zaehler;
            ++anzahl_stellen;
            continue;
        }

    }
    cout &lt;&lt; dezimalzahl &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Zu Testzwecken lasse ich die Variable <code>letzteziffer</code> auch immer ausgeben. Wie also kann ich herausfinden, wann denn diese Zahl zuende ist? Danke schonmal für eure Hilfe!</p>
<p>Meine erste Idee wäre, die Schleife nur insgesamt 100 durchlaufen zu lassen, und sie dann zu beenden. Aber das ist ein wenig unschön.. Aber keine eingegebende Zahl kann und darf 100 Stellen oder noch mehr haben.</p>
<p>EDIT: Ich hab eben noch einen kleinen Fehler bei <code>anzahl_stellen</code> behoben (bei 0 wurde er vorher nicht erhöht). Sorry, hab ich ein wenig spät gemerkt. Ändert aber nichts an meinem vorherigem Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1978595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1978595</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Wed, 10 Nov 2010 17:25:42 GMT</pubDate></item><item><title><![CDATA[Reply to Binärzahl zu Dezimalzahl? on Wed, 10 Nov 2010 17:38:28 GMT]]></title><description><![CDATA[<p>Ich kann deiner Lösung nicht folgen <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="😞"
    /> Mit std::string geht das Ganze einfacher.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

int main(void)
{
	string bin;
	int dezimal = 0;

	cout &lt;&lt; &quot;Geben Sie eine Binaerzahl ein: &quot;;
	cin &gt;&gt; bin;

	for (size_t i = 0, end = bin.size(); i != end; ++i){
		char c = bin[i];
		if ((c == '1') || (c == '0')){
			dezimal *= 2;
			dezimal += c - '0';
        }
		else{
			cout &lt;&lt; &quot;Die Eingabe ist keine Binaerzahl&quot; &lt;&lt; endl;
			system(&quot;pause&quot;);
			return 1;
		}
	}
	cout &lt;&lt; dezimal &lt;&lt; endl;

	system(&quot;pause&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1978605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1978605</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 10 Nov 2010 17:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to Binärzahl zu Dezimalzahl? on Wed, 10 Nov 2010 17:51:51 GMT]]></title><description><![CDATA[<p>Oh O.o<br />
Ja, da hast du wohl recht. Danke, ich hab mal wieder zu weit gedacht^^ Mit string gehts wirklich leichter.</p>
<p>Aber was ist denn an meiner Lösung nicht zu verstehen? Ich bekomme per Zahl % 10 immer die letzte Ziffer von zahl heraus, was ja logisch ist. Danach teil ich sie durch 10, damit ich die letzte Ziffer abschneide. Dann guck ich, ob die Zahl &gt; 0 ist, auch klar. Insgesamt mache ich aus einer Binärzahl folgendes:</p>
<p>1001001</p>
<p>wird zu</p>
<p>1 * 2^0 +<br />
0 * 2^1 +<br />
0 * 2^2 +<br />
1 * 2^3 +<br />
0 * 2^4 +<br />
0 * 2^5 +<br />
1 * 2^6</p>
<p>Also immer überprüfen ob Zahl == 1, wenn ja, wird 2 mit der momentanen Stellenanzahl potenziert und die Stellenanzahl halt um 1 erhöht, wenn nicht wird nur die Stellenanzahl erhöht. Das geht halt immer so weiter.</p>
<p>Danke für die Hilfe <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/1978609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1978609</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Wed, 10 Nov 2010 17:51:51 GMT</pubDate></item></channel></rss>