<?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[eigene Big Integers]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte ein paar Verschlüsselungsalgorithmen implementieren. Dazu brauche ich zu allererst einen Datentyp, der sehr große Zahlen verwaltet. Zur Übung möchte ich ihn gerne selbst implementieren, damit ich mein C++ mal wieder etwas verbessere.</p>
<p>Ich möchte, dass die Zahlen beliebig groß werden können und eigentlich nur durch den Speicher limitiert werden. Dazu hatte ich die Idee, jede Ziffer als Element in ein vector&lt;char&gt; zu speichern.</p>
<p>1.) Ist das eine gute Idee oder sollte ich das anders realisieren?</p>
<p>2.) Wie könnte man z.B. eine Addition oder Multiplikation implemeniteren? Müsste man das dann auf Basis der schriftlichen Addition/Multiplikation machen?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317023/eigene-big-integers</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 06:20:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317023.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 May 2013 18:08:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 18:08:58 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte ein paar Verschlüsselungsalgorithmen implementieren. Dazu brauche ich zu allererst einen Datentyp, der sehr große Zahlen verwaltet. Zur Übung möchte ich ihn gerne selbst implementieren, damit ich mein C++ mal wieder etwas verbessere.</p>
<p>Ich möchte, dass die Zahlen beliebig groß werden können und eigentlich nur durch den Speicher limitiert werden. Dazu hatte ich die Idee, jede Ziffer als Element in ein vector&lt;char&gt; zu speichern.</p>
<p>1.) Ist das eine gute Idee oder sollte ich das anders realisieren?</p>
<p>2.) Wie könnte man z.B. eine Addition oder Multiplikation implemeniteren? Müsste man das dann auf Basis der schriftlichen Addition/Multiplikation machen?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325872</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Fri, 24 May 2013 18:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 18:21:57 GMT]]></title><description><![CDATA[<blockquote>
<p>Dazu hatte ich die Idee, jede Ziffer als Element in ein vector&lt;char&gt; zu speichern.</p>
</blockquote>
<p>Willst du <a href="http://de.wikipedia.org/wiki/BCD-Code" rel="nofollow">BCD</a>s? Dann speichere Ziffern am Besten in <a href="http://de.wikipedia.org/wiki/Nibble" rel="nofollow">Nibble</a>s, nicht in vollen Bytes - also pro Byte zwei Ziffern unterbringen.<br />
Sonst ist das noch Speicher-verschwenderischer als es ohnehin ist.</p>
<blockquote>
<p>2.) Wie könnte man z.B. eine Addition oder Multiplikation implemeniteren? Müsste man das dann auf Basis der schriftlichen Addition/Multiplikation machen?</p>
</blockquote>
<p>Kommt eben völlig drauf an, wie du es implementierst. Sagen wir, du speicherst Ganzzahlen im Zweierkomplement, einfach direkt Bit für Bit in einem Bitset*, dann ist das z. T. anders als mit BCDs.</p>
<p>*Ob dynamisch oder nicht, musst du dir überlegen. Für beides gibt es Implementierungen (Boost.DynamicBitset und <code>std::bitset</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325875</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 24 May 2013 18:21:57 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 19:00:05 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Willst du <a href="http://de.wikipedia.org/wiki/BCD-Code" rel="nofollow">BCD</a>s? Dann speichere Ziffern am Besten in <a href="http://de.wikipedia.org/wiki/Nibble" rel="nofollow">Nibble</a>s, nicht in vollen Bytes - also pro Byte zwei Ziffern unterbringen.</p>
</blockquote>
<p>Darüber habe ich mir ehrlich gesagt keine Gedanken gemacht. Doch warum wäre es verschwenderisch, jede Ziffer als char in einem vector abzuspeichern? Da geht es doch gar nicht um Bytes?!</p>
<p>Du denkst also daran, alles binär abzuspeichern? Was hätte das für einen Vorteil?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325884</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Fri, 24 May 2013 19:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 18:59:02 GMT]]></title><description><![CDATA[<p>Sones Idee arbeitet mit Bitgefrimmel - deine mit Ziffern als Buchstaben. Deine ist speicheraufwendiger, könnte aber effizienter sein. Sones verbraucht nicht so viel Platz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325885</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 24 May 2013 18:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 19:08:48 GMT]]></title><description><![CDATA[<blockquote>
<p>Doch warum wäre es verschwenderisch, jede Ziffer als char in einem vector abzuspeichern?</p>
</blockquote>
<p>Sagen wir, du speicherst mehrere 512-Bit Zahlen, also im Größenbereich von <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msup><mn>2</mn><mrow><mn>5</mn><mn>1</mn><mn>2</mn></mrow></msup><mo>≈</mo><mn>1</mn><msup><mn>0</mn><mrow><mn>1</mn><mn>5</mn><mn>4</mn></mrow></msup></mrow><annotation encoding="application/x-tex">2^{512} \approx 10^{154}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.8141079999999999em;"></span><span class="strut bottom" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord"><span class="mord mathrm">2</span><span class="vlist"><span style="top:-0.363em;margin-right:0.05em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle uncramped"><span class="mord scriptstyle uncramped"><span class="mord mathrm">5</span><span class="mord mathrm">1</span><span class="mord mathrm">2</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mrel">≈</span><span class="mord mathrm">1</span><span class="mord"><span class="mord mathrm">0</span><span class="vlist"><span style="top:-0.363em;margin-right:0.05em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle uncramped"><span class="mord scriptstyle uncramped"><span class="mord mathrm">1</span><span class="mord mathrm">5</span><span class="mord mathrm">4</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span>. Dann braucht deine Lösung 154 Byte pro Zahl, mit Nibbles 77, während die Lösung mit Bits 64 braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325887</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 24 May 2013 19:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 19:12:35 GMT]]></title><description><![CDATA[<p>Das bedeutet, dass Du die Zahl, die du anfänglich beispielsweise als String bekommst, binär zerlegst. Die Idee finde ich gar nicht mal so schlecht. Doch frage ich mich, wie ich sie am besten abspeichere. Eigentlich bietet sich vector immer noch an, doch mit welchem Typ?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325888</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Fri, 24 May 2013 19:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 19:30:13 GMT]]></title><description><![CDATA[<p>char.<br />
Weil char ist IMMER ein Byte groß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325890</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 24 May 2013 19:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 19:35:14 GMT]]></title><description><![CDATA[<p>Wenn Performance eine Rolle spielt, muss die Anzahl der Teil-Operationen pro Rechenvorgang minimiert werden. Das geschieht durch Auswahl von Algorithmen mit optimaler Komplexität und Minimierung der Anzahl der Operanden. Normalerweise sollten Zahlen daher mit einer Basis gespeichert werden, die dem größten Typ entspricht, den der Computer nativ verarbeiten kann (also typischerweise 2^32 oder 2^64). Ganz nebenbei ist das auch optimal in Hinblick auf den Speicherverbrauch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325891</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 24 May 2013 19:35:14 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 19:36:11 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>char.<br />
Weil char ist IMMER ein Byte groß.</p>
</blockquote>
<p>Naja, ich würde da zu uint8_t tendieren. Ist praktisch immer unsigned char, nur ist halt ein Byte nicht zwangsläufig 8 Bit groß. <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="😉"
    /> Und es wäre schön, da eine Sicherheit zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325892</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 24 May 2013 19:36:11 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 19:56:02 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>nur ist halt ein Byte nicht zwangsläufig 8 Bit groß. <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="😉"
    /> Und es wäre schön, da eine Sicherheit zu haben.</p>
</blockquote>
<p>Ja, die Sicherheit kann Leben retten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325895</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 24 May 2013 19:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 20:03:30 GMT]]></title><description><![CDATA[<p>Es ist garantiert, dass CHAR_BIT mindestens 8 ist.<br />
Also geht man von 8 aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325898</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 24 May 2013 20:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 20:08:52 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>nur ist halt ein Byte nicht zwangsläufig 8 Bit groß. <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="😉"
    /> Und es wäre schön, da eine Sicherheit zu haben.</p>
</blockquote>
<p>Ja, die Sicherheit kann Leben retten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Naja, aber wenn das Ding eben auch 10 Bit groß sein kann, können einige Definitionen für Dinge wie bspw. zyklische Shifts nicht mehr richtig sein.</p>
<pre><code>unsigned char cyclicLeftShift(unsigned char val, std::size_t bits)
{
    return (val &lt;&lt; bits) | (val &gt;&gt; (8-bits));
}
</code></pre>
<p>Und man baut seinen Code zu mit Dingen wie <code>CHAR_BIT</code> . Finde ich persönlich nicht schön. Wenn man verlangt, dass es einen Typ mit Bitlänge 8 auf der Maschine gibt, muss man sich nie wieder über sowas Gedanken machen und legt es beiseite.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325900</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 24 May 2013 20:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 20:18:45 GMT]]></title><description><![CDATA[<pre><code>static_assert(CHAR_BIT == 8, &quot;your OS is broken&quot;);
</code></pre>
<p>Festgelegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325901</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 24 May 2013 20:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Thu, 12 Jun 2014 00:30:52 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325902</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 12 Jun 2014 00:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 20:53:00 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Wenn Performance eine Rolle spielt, muss die Anzahl der Teil-Operationen pro Rechenvorgang minimiert werden.</p>
</blockquote>
<p>Es gibt noch einen anderen Faktor: Ein- und Ausgabe (bzw. Umrechnung Bigint-Daten - Dezimalstring). Für Spielzeugprogramme ist es oft keine schlechte Idee, auf Zehnerpotenzen aufzubauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325907</guid><dc:creator><![CDATA[spielzeug]]></dc:creator><pubDate>Fri, 24 May 2013 20:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Fri, 24 May 2013 21:46:19 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18082">@freakC</a>++: Welche der zu implementierenden Algos brauchen denn mehr als 32 Bit?</p>
</blockquote>
<p>Von welchen Algorithmen sprichst Du?</p>
<p>spielzeug schrieb:</p>
<blockquote>
<p>Es gibt noch einen anderen Faktor: Ein- und Ausgabe (bzw. Umrechnung Bigint-Daten - Dezimalstring).</p>
</blockquote>
<p>Da dachte ich einfach an eine toString - Funktion, die meinen vector durchgeht und einen schönen String draus baut.</p>
<p>Ok, der Konsens rät mir wohl zu einer binären Darstellung. Dies sagt mir nach ein bisschen Überlegen doch auch mehr zu, da ich so später einfach Operationen wie das Addieren etc. implementieren kann. Ich könnte mir einfach einen RippleCarry Addierer bauen.</p>
<p>Leider hakt es noch bei einem Punkt ein bissl <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>
<p>1.) Ich kriege den String: &quot;13423...349&quot;. Ich dachte ja daran, die Ziffern einzeln abzuspeichern. Verstehe ich euch richtig, dass ihr jetzt jede Ziffer binär umwandeln würdet und dann in einem vector&lt;uint8_t&gt; speichert?</p>
<p>3.) Ich habe bisher noch nicht mit uint8_t gearbeitet. Verstehe ich es richtig, dass es wie ein char ist. nur hier garantiert ist, dass tatsächlich immer acht Bits, also ein Byte allokiert wurde?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325911</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Fri, 24 May 2013 21:46:19 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Thu, 12 Jun 2014 00:30:51 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325912</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 12 Jun 2014 00:30:51 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 20:53:40 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bin gerade recht viel beschäfitgt, sodass ich einige Tage beim Projekt ruhen musste. Trotzdem bin ich weiterhin interessiert, meine BigInteger Klasse zu realisieren. Ich muss ehrlichg gestehen, dass ich noch nicht ganz schlau aus euren Antworten geworden bin.</p>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Von welchen Algorithmen sprichst Du?</p>
</blockquote>
<p>Entschuldigt, mein Fehler. Ich rede von RSA zum Beispiel. Also es geht um Algorithmen, die weit mehr als nur mit 32 Bit arbeiten. Ich befinde ich mich in einer Größenordnung von 2048 Bit.</p>
<p>Ich suche also einen Datentyp, der genau acht Bit groß ist. Anscheinend darf ich mich da bei char nicht drauf verlassen.</p>
<p>1.) Wo hat char bitte keine 8 Bit?</p>
<p>Von std::uint_least32_t habe ich noch nie was gehört und finde dazu auch keine guten Referenzen.</p>
<p>2.) Was ist der Vorteil dieses Datentyps? Ich sehe nur die Beschreibung &quot;width of <strong>at least</strong> 8, 16, 32 and 64 bits respectively. Das will ich doch gerade nicht!</p>
<p>Ich habe mir noch ein paar weitere Gedanken gemacht. Mir bleibt ja nichts anderes über, als die Zahl als BCD abzuspeichern. Andernfalls müsste ich die Zahl irgendwie binär zerlegen, wozu ich sie aber zunächst in eine Variabel packen müsste. Das geht ja gerade (noch) nicht.</p>
<p>3.) Ich hatte die primitive Idee, einfach mit bool zu arbeiten. Ist es nicht am effizientesten, wenn ich jedes Bit als true/false hinterlege. Damit habe ich auch die Speicherfrage gelöst, denn eine n Bit Zahl wird genau n Bit im Speicher beanspruchen.</p>
<p>Vielen Dank für eure Hilfe<br />
freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327225</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Wed, 29 May 2013 20:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 21:01:27 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Hallo zusammen,</p>
<p>ich bin gerade recht viel beschäfitgt, sodass ich einige Tage beim Projekt ruhen musste. Trotzdem bin ich weiterhin interessiert, meine BigInteger Klasse zu realisieren. Ich muss ehrlichg gestehen, dass ich noch nicht ganz schlau aus euren Antworten geworden bin.</p>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Von welchen Algorithmen sprichst Du?</p>
</blockquote>
<p>Entschuldigt, mein Fehler. Ich rede von RSA zum Beispiel. Also es geht um Algorithmen, die weit mehr als nur mit 32 Bit arbeiten. Ich befinde ich mich in einer Größenordnung von 2048 Bit.</p>
<p>Ich suche also einen Datentyp, der genau acht Bit groß ist. Anscheinend darf ich mich da bei char nicht drauf verlassen.</p>
<p>1.) Wo hat char bitte keine 8 Bit?</p>
<p>Von std::uint_least32_t habe ich noch nie was gehört und finde dazu auch keine guten Referenzen.</p>
<p>2.) Was ist der Vorteil dieses Datentyps? Ich sehe nur die Beschreibung &quot;width of <strong>at least</strong> 8, 16, 32 and 64 bits respectively. Das will ich doch gerade nicht!</p>
<p>Ich habe mir noch ein paar weitere Gedanken gemacht. Mir bleibt ja nichts anderes über, als die Zahl als BCD abzuspeichern. Andernfalls müsste ich die Zahl irgendwie binär zerlegen, wozu ich sie aber zunächst in eine Variabel packen müsste. Das geht ja gerade (noch) nicht.</p>
<p>3.) Ich hatte die primitive Idee, einfach mit bool zu arbeiten. Ist es nicht am effizientesten, wenn ich jedes Bit als true/false hinterlege. Damit habe ich auch die Speicherfrage gelöst, denn eine n Bit Zahl wird genau n Bit im Speicher beanspruchen.</p>
<p>Vielen Dank für eure Hilfe<br />
freakC++</p>
</blockquote>
<p>lol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327227</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 29 May 2013 21:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 21:02:14 GMT]]></title><description><![CDATA[<p>Du willst einfach die fixed-size Datentypen uint8_t/uint16_t/uint32_t etc. benutzen. (Die will man in den allermeisten Fällen eh.) Big-Integer sind in derzeitigem C++ aber einfach nicht ordentlich zu implementieren, weil die Überlaufberechnung (die die CPU eigentlich gratis mit macht) einfach zu umständlich ist. Das macht nur mit Assembler Spaß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327228</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 29 May 2013 21:02:14 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 21:13:54 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>3.) Ich hatte die primitive Idee, einfach mit bool zu arbeiten. Ist es nicht am effizientesten, wenn ich jedes Bit als true/false hinterlege. Damit habe ich auch die Speicherfrage gelöst, denn eine n Bit Zahl wird genau n Bit im Speicher beanspruchen.</p>
</blockquote>
<p>Nein. Bool ist exakt 1 Byte groß. also auf allen handelsülichen maschinen 8Bit. Warum? Weil C++ nur Bytes addressieren kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327229</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 29 May 2013 21:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 21:18:33 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Nein. Bool ist exakt 1 Byte groß. also auf allen handelsülichen maschinen 8Bit. Warum? Weil C++ nur Bytes addressieren kann.</p>
</blockquote>
<p>§ 5.3.3 / 1 schrieb:</p>
<blockquote>
<p>sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1. The result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined. [ Note: in particular, sizeof(bool), sizeof(char16_t), sizeof(char32_t), and<br />
sizeof(wchar_t) are implementation-defined.74 — end note ]<br />
[...]<br />
74) sizeof(bool) is not required to be 1.</p>
</blockquote>
<p>Wüsste nicht, wie man das noch expliziter schreiben könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327231</guid><dc:creator><![CDATA[implizitexplizit]]></dc:creator><pubDate>Wed, 29 May 2013 21:18:33 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 21:21:56 GMT]]></title><description><![CDATA[<p>Ich hab hier <a href="http://www.amazon.de/Kryptographie-Zahlentheoretische-Computer-Arithmetik-kryptographische-Xpert-press/dp/3540420614/ref=sr_1_1?ie=UTF8&amp;qid=1369862129&amp;sr=8-1&amp;keywords=kryptografie+in+c+und+c%2B%2B" rel="nofollow">http://www.amazon.de/Kryptographie-Zahlentheoretische-Computer-Arithmetik-kryptographische-Xpert-press/dp/3540420614/ref=sr_1_1?ie=UTF8&amp;qid=1369862129&amp;sr=8-1&amp;keywords=kryptografie+in+c+und+c%2B%2B</a> noch als Buchempfehlung zu genau dem Thema.</p>
<p>Zur Überlaufproblematik gerade bei der Multiplikation wird dort folgendes vorgeschlagen: Angenommen, man arbeitet mit uintN_t als Typ für die &quot;Ziffern&quot;. Dann castet man vor der Multiplikation jeweils nach uint2N_t, und kann damit den Überlauf darstellen. Das Ergebnis kann man dann mit Bitoperation wieder in uintN_t zerlegen.</p>
<p>Man nimmt also nicht den größten auf der Plattform nutzbaren Typ, sondern einen, der nur halb so groß ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327233</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Wed, 29 May 2013 21:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 21:23:37 GMT]]></title><description><![CDATA[<p>implizitexplizit schrieb:</p>
<blockquote>
<p>Wüsste nicht, wie man das noch expliziter schreiben könnte.</p>
</blockquote>
<p>Kleiner kanns aber auch nicht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327234</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 29 May 2013 21:23:37 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 21:28:00 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Mir bleibt ja nichts anderes über, als die Zahl als BCD abzuspeichern. Andernfalls müsste ich die Zahl irgendwie binär zerlegen, wozu ich sie aber zunächst in eine Variabel packen müsste.</p>
</blockquote>
<p>Ach was, das ist doch gar nicht nötig. Du kannst die Zahl in einem simplen char-Array speichern, oder eben etwas umständlicher in einem Vektor.<br />
Damit kannst du Zahlen bauen, die viele Megabytes lang sind, ohne Probleme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327235</guid><dc:creator><![CDATA[big number bubie]]></dc:creator><pubDate>Wed, 29 May 2013 21:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to eigene Big Integers on Wed, 29 May 2013 21:34:04 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Ich habe mir noch ein paar weitere Gedanken gemacht. Mir bleibt ja nichts anderes über, als die Zahl als BCD abzuspeichern. Andernfalls müsste ich die Zahl irgendwie binär zerlegen, wozu ich sie aber zunächst in eine Variabel packen müsste. Das geht ja gerade (noch) nicht.</p>
</blockquote>
<p>Sagt Dir das <a href="http://de.wikipedia.org/wiki/Horner-Schema" rel="nofollow">Horner-Schema</a> was? Damit kannst Du die Zahl ziffernweise einlesen und sofort in eine Zahl zur Basis 2^N konvertieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327236</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Wed, 29 May 2013 21:34:04 GMT</pubDate></item></channel></rss>