<?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[Erklärungshilfe für einen Neueinsteiger]]></title><description><![CDATA[<p>Hallo Allerseits,<br />
wie der Titel schon sagt bin ich ein ziemlicher Neuling in Sachen programmieren. Ich versuche es mir selber beizubringen mit Hilfe vom Buch Der C++ Programmier von Ulrich Breymann und dem Internet.<br />
So zu meinem Problem</p>
<pre><code>const string str{&quot;17462309&quot;}; // aus Aufgabentext
  long int z = 0L;
  for (auto zeichen : str) {
    z *= 10;
    z += static_cast&lt;int&gt;(zeichen) - static_cast&lt;int&gt;('0');
</code></pre>
<p>Das ist die Lösung zu einer Aufgabe, ein String Zahl umwandeln und dann die Quersumme berechnen, aber ich verstehe nicht was in den 2 Zeilen passiert.</p>
<pre><code>z *= 10;
    z += static_cast&lt;int&gt;(zeichen) - static_cast&lt;int&gt;('0');
</code></pre>
<p>Wenn jemand Zeit hätte, mir das zu erkären, wäre ich sehr erfreut und dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/339566/erklärungshilfe-für-einen-neueinsteiger</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 00:55:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339566.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Sep 2016 22:33:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Fri, 09 Sep 2016 22:33:26 GMT]]></title><description><![CDATA[<p>Hallo Allerseits,<br />
wie der Titel schon sagt bin ich ein ziemlicher Neuling in Sachen programmieren. Ich versuche es mir selber beizubringen mit Hilfe vom Buch Der C++ Programmier von Ulrich Breymann und dem Internet.<br />
So zu meinem Problem</p>
<pre><code>const string str{&quot;17462309&quot;}; // aus Aufgabentext
  long int z = 0L;
  for (auto zeichen : str) {
    z *= 10;
    z += static_cast&lt;int&gt;(zeichen) - static_cast&lt;int&gt;('0');
</code></pre>
<p>Das ist die Lösung zu einer Aufgabe, ein String Zahl umwandeln und dann die Quersumme berechnen, aber ich verstehe nicht was in den 2 Zeilen passiert.</p>
<pre><code>z *= 10;
    z += static_cast&lt;int&gt;(zeichen) - static_cast&lt;int&gt;('0');
</code></pre>
<p>Wenn jemand Zeit hätte, mir das zu erkären, wäre ich sehr erfreut und dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508102</guid><dc:creator><![CDATA[Skenderbeu]]></dc:creator><pubDate>Fri, 09 Sep 2016 22:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Fri, 09 Sep 2016 23:42:55 GMT]]></title><description><![CDATA[<p>Du willst dir mal eine ASCII-Tabelle anschauen und feststellen, in welcher Relation das Zeichen '0' (nicht die Ziffer 0) in Relation zu den anderen numerischen Zeichen steht. Dann wird dir vielleicht klar, was hier passiert.</p>
<p>EDIT: <code>long</code> ? Wenn die Zahl nicht negativ werden kann, sollte man <code>size_t</code> verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508104</guid><dc:creator><![CDATA[dachschaden]]></dc:creator><pubDate>Fri, 09 Sep 2016 23:42:55 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 00:14:02 GMT]]></title><description><![CDATA[<p>Tja man merkt erst im Nachhinein das die Frage doof war ^^ Vielen Dank hatte das mit der ASCII Tabelle total vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508105</guid><dc:creator><![CDATA[Skenderbeu]]></dc:creator><pubDate>Sat, 10 Sep 2016 00:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 07:22:18 GMT]]></title><description><![CDATA[<p>dachschaden schrieb:</p>
<blockquote>
<p>EDIT: <code>long</code> ? Wenn die Zahl nicht negativ werden kann, sollte man <code>size_t</code> verwenden.</p>
</blockquote>
<p>Wieso möchtest du einen Datentyp für Größenangaben zum Berechnen von Quersummen benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508106</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 10 Sep 2016 07:22:18 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 07:55:04 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Wieso möchtest du einen Datentyp für Größenangaben zum Berechnen von Quersummen benutzen?</p>
</blockquote>
<p>Weil <code>size_t</code> ein Typ darstellt, welcher die Größe jedes beliebigen Objektes (auf der Maschine) speichern kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508107</guid><dc:creator><![CDATA[dachschaden]]></dc:creator><pubDate>Sat, 10 Sep 2016 07:55:04 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 08:10:31 GMT]]></title><description><![CDATA[<p>dachschaden schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Wieso möchtest du einen Datentyp für Größenangaben zum Berechnen von Quersummen benutzen?</p>
</blockquote>
<p>Weil <code>size_t</code> ein Typ darstellt, welcher die Größe jedes beliebigen Objektes (auf der Maschine) speichern kann.</p>
</blockquote>
<p>Ja? Was hat das mit Quersummen zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508108</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 10 Sep 2016 08:10:31 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 08:24:01 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ja? Was hat das mit Quersummen zu tun?</p>
</blockquote>
<p>Größte native Variable, die Zahlen speichern kann? *</p>
<p>Oder anders: was würdest <em>du</em> vorschlagen?</p>
<p>EDIT: *Mir geht es darum, dass man direkt sieht, dass es sich hier um eine vorzeichenlose Zahl handelt, die so groß ist wie nur möglich. Selbst, wenn man diese Größen vielleicht gar nie erreicht - <code>size_t</code> ist immer verfügbar, es tut nicht weh, ihn zu benutzen, und wenn er überläuft, dann hat man wenigstens etwas weniger falsch gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508109</guid><dc:creator><![CDATA[dachschaden]]></dc:creator><pubDate>Sat, 10 Sep 2016 08:24:01 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 08:25:30 GMT]]></title><description><![CDATA[<p>Die viel interessantere Frage ist meiner Meinung nach, wozu hier überhaupt ein <code>static_cast&lt;int&gt;(...)</code> gemacht wird. Könnte man doch auch ganz weglassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508111</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Sat, 10 Sep 2016 08:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 08:25:37 GMT]]></title><description><![CDATA[<p>dachschaden schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ja? Was hat das mit Quersummen zu tun?</p>
</blockquote>
<p>Größte native Variable, die Zahlen speichern kann?</p>
</blockquote>
<p>Das geht nicht aus der Definition hervor und selbst wenn es das täte, beantwortest du damit immer noch nicht meine Frage. Was ist beispielsweise mit uintptr_t? Das ist effektiv ein size_t, aber du würdest es sicher nicht empfehlen, oder? Weil es absolut unangemessen ist, von der Semantik her. Ebenso wie size_t selber.</p>
<blockquote>
<p>Oder anders: was würdest <em>du</em> vorschlagen?</p>
</blockquote>
<p>long.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508112</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 10 Sep 2016 08:25:37 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 08:50:16 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Was ist beispielsweise mit uintptr_t? Das ist effektiv ein size_t, aber du würdest es sicher nicht empfehlen, oder?</p>
</blockquote>
<p>Nein, ist es effektiv nicht. Ausnahme sind Maschinen mit segmentierter Speicherverwaltung. Da kann ein String nur so groß wie ein Segment werden, und <code>size_t</code> muss diesen fassen können. <code>uintptr_t</code> kann aber auch für globale Adressen verwendet werden, also größer sein, als nötig ist. Das hat nichts mit der Semantik zu tun.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>long.</p>
</blockquote>
<p>Das könnte interessant auf Windows werden, welches <code>long</code> auch auf 64-Bit-Systemen als 32-Bit-Zahl definiert ... da muss ich nicht mal kreativ werden, um mir ein Overflow-Szenario vorzustellen. <code>size_t</code> dagegen ist dort auch 8 Bytes groß.</p>
<p><s><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/33261">@wob</a>: kann eine Mikrooptimierung sein ... wenn mich mein Gedächtnis nicht trügt, sind Operationen ohne Carry-Flag marginal schneller auszuführen als mit.</s></p>
<p>EDIT: Nein, das ist Blödsinn, wir konvertieren ja in <code>int</code> , nicht in <code>unsigned</code> ... nein, war Unsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508115</guid><dc:creator><![CDATA[dachschaden]]></dc:creator><pubDate>Sat, 10 Sep 2016 08:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 08:54:19 GMT]]></title><description><![CDATA[<p>dachschaden schrieb:</p>
<blockquote>
<p>technisches BlaBla.</p>
</blockquote>
<p>Merkst du was? Du willst nur Rechnen und kommst aber mit solchen Erklärungen an. Weil du mit size_t einen Datentyp gewählt hast, der eine technische Kenngröße der Maschine darstellt anstatt der Semantik &quot;Zahl zum Rechnen&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508117</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 10 Sep 2016 08:54:19 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 08:57:55 GMT]]></title><description><![CDATA[<p>Nein, ich merk es nicht, tut mir Leid. Diese technische Kenngröße ist nun mal ideal für das Berechnen solcher Zahlen.<br />
Und wenn man vorzeichenbehaftete Quersummen haben will, kann man immer noch <code>ssize_t</code> verwenden, oder eine Sprache verwenden, die einem die Bürde von Overflows abnimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508120</guid><dc:creator><![CDATA[dachschaden]]></dc:creator><pubDate>Sat, 10 Sep 2016 08:57:55 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sat, 10 Sep 2016 15:11:40 GMT]]></title><description><![CDATA[<p>Also das ist bloss eine Übungsaufgabe aus dem ersten Kapitel. In der Übung wird nur das benutzt, was man zuvor im Kapitel gelernt hat. Natürlich kann man es besser schreiben, aber das lernt man ja später noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508134</guid><dc:creator><![CDATA[Skenderbeu]]></dc:creator><pubDate>Sat, 10 Sep 2016 15:11:40 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sun, 11 Sep 2016 20:39:33 GMT]]></title><description><![CDATA[<p>dachschaden schrieb:</p>
<blockquote>
<p>Nein, ich merk es nicht, tut mir Leid. Diese technische Kenngröße ist nun mal ideal für das Berechnen solcher Zahlen.<br />
Und wenn man vorzeichenbehaftete Quersummen haben will, kann man immer noch <code>ssize_t</code> verwenden, oder eine Sprache verwenden, die einem die Bürde von Overflows abnimmt.</p>
</blockquote>
<p>wenn es tatsächlich wichtig wäre, overflows auszuschließen, dann wäre - wie du schon sagst - auch <code>size_t</code> völlig falsch. dann wäre die aufgabe nämlich, einen typ für große zahlen zu entwickeln. <code>size_t</code> wäre jedenfalls auch nicht zu empfehlen. was *du* vorschlägst, müsste so aussehen:</p>
<pre><code class="language-cpp">using big_unsigned_int = size_t;
</code></pre>
<p>oder einfach bei int bleiben.</p>
<p>im übrigen könnte ja der zu konvertierende string ein einzelnes leerzeichen sein. dann wird's auch negativ.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508240</guid><dc:creator><![CDATA[dove]]></dc:creator><pubDate>Sun, 11 Sep 2016 20:39:33 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sun, 11 Sep 2016 21:21:26 GMT]]></title><description><![CDATA[<p>dove schrieb:</p>
<blockquote>
<p>wenn es tatsächlich wichtig wäre, overflows auszuschließen, dann wäre - wie du schon sagst - auch <code>size_t</code> völlig falsch.</p>
</blockquote>
<p>Lies nochmal:</p>
<p>dachschaden schrieb:</p>
<blockquote>
<p>Bürde von Overflows</p>
</blockquote>
<p>Da steht nichts davon, Overflows auszuschließen, sondern nur, dass man in C/C++ mit Overflows leben und auf sie reagieren muss. Auf einen Overflow kann man mit jeden vorzeichenfreiem Typen prüfen</p>
<pre><code>if(i + x &lt; i)
    return EOVERFLOW;
</code></pre>
<p>Ist also schonmal eine deutliche Verbesserung gegenüber <code>long</code> . Egal, ob wir uns jetzt auf Windows befinden oder nicht (wegen der <code>int32_t</code> -Implementierung da).</p>
<p>Jetzt kann man anfangen, mehr Hardware und Software auf das Problem zu werfen, auch mit dynamisch wachsenden Integern. Ist vollkommen legitim, da sag ich nichts gegen - wenn es sein muss, dann muss es sein. Worum es geht ist, dass ich in einem Fall, wie der TE ihn beschrieben hat, <code>size_t</code> oder <code>ssize_t</code> vor allen anderen Typen verwenden würde.</p>
<p>Aber gut, lassen wir uns mal auf ein Gedankenexperiment ein - wir wollen einen Datentyp, der in der Lage ist, dezimale Quersummen zu berechnen. Mit jeder Stelle/Byte können wir maximal 9 auf unsere Quersumme addieren, wir können also [den maximalen Wert des Quersummentyps + 10%] Zeichen einlesen, bevor ein Overflow passiert. Für 64 Bit sind wir bei ungefähr 2.0291418e+17 (18.446.744.073.709.551.615 + 10%) ... ab dann wird's günstig, es genauso zu machen, wir du beschrieben hast. Vorausgesetzt, jeder dieser Ziffern ist eine 9 - bei kleineren Ziffern ändert sich die Anzahl der Bytes, die man einlesen kann, bevor ein Overflow passiert, entsprechend.</p>
<p>Wenn man soweit gehen muss, OK. Andernfalls reicht <code>size_t</code> erstmal.</p>
<p>dove schrieb:</p>
<blockquote>
<p>im übrigen könnte ja der zu konvertierende string ein einzelnes leerzeichen sein. dann wird's auch negativ.</p>
</blockquote>
<p>Ähh, wieso? In so einem Fall ist der eingelesene Wert 0 - weil halt nichts eingelesen wurde. Wenn man entsprechend drauf ist, packt man den Code in eine Funktion und lässt einen Fehlercode zurückgeben, der indiziert, dass der eingelesene Wert 0 ist, aber nicht, weil auch &quot;0&quot; drinsteht, sondern weil nichts drin ist. Also, in C jetzt. In C++ wirft man eine Exception, man lässt den Caller entscheiden, wie er damit verfährt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508244</guid><dc:creator><![CDATA[dachschaden]]></dc:creator><pubDate>Sun, 11 Sep 2016 21:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sun, 11 Sep 2016 21:41:39 GMT]]></title><description><![CDATA[<p>Ich bin auch der Meinung, dass <code>size_t</code> für indices etc. gedacht ist.</p>
<p>Wenn ich mit der Maus in VS15 über <code>size_t</code> fahre steht da</p>
<pre><code>typedef unsigned int size_t
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2508249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508249</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Sun, 11 Sep 2016 21:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Sun, 11 Sep 2016 22:15:48 GMT]]></title><description><![CDATA[<p>dachschaden schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>ich sagte ja, wenn man es unbedingt so machen will, dann sollte man es allerdings zumindest mit einem <code>using big_uint = size_t</code> machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508254</guid><dc:creator><![CDATA[dove]]></dc:creator><pubDate>Sun, 11 Sep 2016 22:15:48 GMT</pubDate></item><item><title><![CDATA[Reply to Erklärungshilfe für einen Neueinsteiger on Mon, 12 Sep 2016 04:13:21 GMT]]></title><description><![CDATA[<p>Zur <code>size_t</code> -Diskussion möchte ich nur kurz einwerfen, dass ich kürzlich für den Arduino Nano programmiert habe:<br />
<a href="https://gcc.gnu.org/wiki/avr-gcc" rel="nofollow">Dort</a> ist <code>sizeof(size_t) = 2</code> , und dennoch könnte ich auch z.B. mit einem <code>uint64_t</code> rechnen. Mit letzterem kann man natürlich etwas längere Strings umwandeln <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>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2508270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2508270</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Mon, 12 Sep 2016 04:13:21 GMT</pubDate></item></channel></rss>