<?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[mehr als eine 64bit int]]></title><description><![CDATA[<p>Moin,</p>
<p>Ist es moeglich einen groesseren Datentype als long long zu generieren?</p>
<p>Ich muesste mit:<br />
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999<br />
Rechnen.... also max. 100 Ziffern</p>
<p>*hust* ist das moeglich?</p>
<p>Bei google hab ich was von malloc() gelesen.<br />
Koennte man es mit malloc() loesen?</p>
<p>Boost hat ein dynamische integer loesung, die geht aber auch nicht weiter wie<br />
2^32</p>
<p>Hat jemand sowas schon mal versucht?</p>
<p>Gg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144633/mehr-als-eine-64bit-int</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 20:30:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144633.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Apr 2006 21:31:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mehr als eine 64bit int on Wed, 19 Apr 2006 21:31:02 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>Ist es moeglich einen groesseren Datentype als long long zu generieren?</p>
<p>Ich muesste mit:<br />
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999<br />
Rechnen.... also max. 100 Ziffern</p>
<p>*hust* ist das moeglich?</p>
<p>Bei google hab ich was von malloc() gelesen.<br />
Koennte man es mit malloc() loesen?</p>
<p>Boost hat ein dynamische integer loesung, die geht aber auch nicht weiter wie<br />
2^32</p>
<p>Hat jemand sowas schon mal versucht?</p>
<p>Gg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040946</guid><dc:creator><![CDATA[xGhost]]></dc:creator><pubDate>Wed, 19 Apr 2006 21:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Wed, 19 Apr 2006 21:37:47 GMT]]></title><description><![CDATA[<p>Eine Bibliothek die du hier findest könnte helfen:</p>
<p><a href="http://www.trumphurst.com/cpplibs3.html#Libraries_available_via_FTP__D_L_" rel="nofollow">http://www.trumphurst.com/cpplibs3.html#Libraries_available_via_FTP__D_L_</a> Die heißt &quot;HugeCalc - Arbitrary accuracy large integer calculations&quot;, ich weiß net wie gut die ist, hab sie nur dort gefunden.</p>
<p>Mit malloc() forderst du Speicher auf dem Heap an, das hilft dir aber nicht beim Rechnen.</p>
<p>mfg<br />
Apophis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040949</guid><dc:creator><![CDATA[Lord Apophis]]></dc:creator><pubDate>Wed, 19 Apr 2006 21:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Wed, 19 Apr 2006 23:41:34 GMT]]></title><description><![CDATA[<p>gut danke ist mal ein anfang.</p>
<p>Ich hab leider eine OpenBSD (Unix) mit GCC 3.3.5<br />
und kein Borland.</p>
<p>also ist malloc sowas wie ein bitset?</p>
<p>Edit:</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-300796.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-300796.html</a><br />
Auch noch interessant.<br />
Leider geht ein link nicht mehr...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040994</guid><dc:creator><![CDATA[xGhost]]></dc:creator><pubDate>Wed, 19 Apr 2006 23:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Wed, 19 Apr 2006 23:44:55 GMT]]></title><description><![CDATA[<p>malloc ist eine Funktion welche einen Speicherbereich auf dem Heap alloziert... nicht mehr nicht weniger. Was du mit dem Speicherbereich machst ist dann deine Sache. Zu ner Bibliothek, die mehr als 2^64 (also long long) haben will, gehört halt mehr als malloc <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/1040996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040996</guid><dc:creator><![CDATA[bluecode]]></dc:creator><pubDate>Wed, 19 Apr 2006 23:44:55 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 00:32:54 GMT]]></title><description><![CDATA[<p>Jo sehe ich ein.</p>
<p>Ich nehme mal GMP. Sieht noch ortentlich aus.<br />
Ich hoffe mal, ich kann ihn mit boost::lexical_cast<a href="std::string" rel="nofollow">std::string</a>(gmp_class)<br />
casten. mal sehen.</p>
<p>Wenn ich naechste woche entlich wieder mal zeit habe,<br />
und frei vom(n?) (lehrn) Projekt bin. werde ich mir mal<br />
anschauen wie man mit hilfe von malloc ne int bastelt.</p>
<p>Wenn jemand einen interessanten link hat, zu:<br />
- GMP<br />
- int selber basteln (fuer spaeter, wenn wieder zeit habe)<br />
Bitte posten.</p>
<p>Danke fuer die Hilfe um spaete stunde ^^</p>
<p>Gg</p>
<p><strong>Edit</strong><br />
Deutsche sprache, schwere sprache um 02:33</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041006</guid><dc:creator><![CDATA[xGhost]]></dc:creator><pubDate>Thu, 20 Apr 2006 00:32:54 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 05:43:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>erst kürzlich gab es auch einen <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-143707-and-start-is-0.html" rel="nofollow">Thread</a> zu gmp bzw. großen Zahlen allgemein.</p>
<blockquote>
<p>Wenn jemand einen interessanten link hat, zu:<br />
- GMP</p>
</blockquote>
<p>Das offizielle <a href="http://www.swox.com/gmp/manual/" rel="nofollow">Handbuch</a> ist sehr gut. Das deckt alles ab <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>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041030</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Thu, 20 Apr 2006 05:43:52 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 06:09:22 GMT]]></title><description><![CDATA[<p>xGhost schrieb:</p>
<blockquote>
<p>also ist malloc sowas wie ein bitset?</p>
</blockquote>
<p>malloc() ist sowas wie new (genauer: es ist die C-Entsprechung zu new).</p>
<p>Und wenn du Super-Int's selber schreiben willst, solltest du bei einem vector&lt;unsigned char&gt; (oder ähnliches) anfangen und dann beginnen, schriftliche Addition, Multiplikation und Division auf Computer-Niveaus zu übersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041036</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 06:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 08:33:31 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>xGhost schrieb:</p>
<blockquote>
<p>also ist malloc sowas wie ein bitset?</p>
</blockquote>
<p>malloc() ist sowas wie new (genauer: es ist die C-Entsprechung zu new).</p>
<p>Und wenn du Super-Int's selber schreiben willst, solltest du bei einem vector&lt;unsigned char&gt; (oder ähnliches) anfangen und dann beginnen, schriftliche Addition, Multiplikation und Division auf Computer-Niveaus zu übersetzen.</p>
</blockquote>
<p>Da sehe ich nur eine Problem: das einzige das mir einfällt um sowas zu proggen ist ASM, oder kann C++ einen über Über- bzw. Unterläufe informiren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041096</guid><dc:creator><![CDATA[Lord Apophis]]></dc:creator><pubDate>Thu, 20 Apr 2006 08:33:31 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 08:45:32 GMT]]></title><description><![CDATA[<p>Da mußt du halt etwas tricksen, um das hinzubekommen (und intern etwas mehr Platz einkalkulieren für die Zwischenwerte):</p>
<pre><code class="language-cpp">pair&lt;char,char&gt; add_pos(char l,char r,char ex=0)
//addieren einer Zahlenstelle (mit Übertrag)
{
  short res=l+r+ex;
  return make_pair(res&amp;0xFF /*Summenstelle*/, res&gt;&gt;8 /*Übertrag für nächste Stelle*/);
}

vector&lt;char&gt; add(const vector&lt;char&gt;&amp; l,const vector&lt;char&gt;&amp; r)
{
  pair&lt;char,char&gt; sval;
  vector&lt;char&gt; res;
  for(int i=0;i&lt;max(l.size(),r.size();++i)
  {
    char ls=(i&lt;l.size())?l[i]:0,
         rs=(i&lt;r.size())?r[i]:0;
    sval=add_pos(ls,rs,sval.second);
    res.push_back(sval.first);
  }
  if(sval.second&gt;0)res.push_back(sval.second);
  return res;
}
</code></pre>
<p>(ich bin mir sicher, das kann man noch optimieren, aber das Prinzip sollte klar sein)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041108</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 08:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 10:01:10 GMT]]></title><description><![CDATA[<p>Kannst auch <a href="http://www.dhost.info/voodoocpp/index.php?page=progs/libs" rel="nofollow">http://www.dhost.info/voodoocpp/index.php?page=progs/libs</a> probiren. Ist eine Lib die ich vor kurzem selbst zusammen gebaut hab. Besteht aus reinem standard C++ und sollte daher portabel sein. Das Interface ist auch recht einfach zu bedinen:</p>
<pre><code class="language-cpp">#include&lt;num/natural.hpp&gt;
#include&lt;iostream&gt;
using namespace Num;

int main(){
  Natural a,b;
  cout&lt;&lt;&quot;a = &quot;;
  cin&gt;&gt;a;
  cout&lt;&lt;&quot;b = &quot;;
  cin&gt;&gt;b;
  cout&lt;&lt;&quot;a + b = &quot;&lt;&lt;(a+b)&lt;&lt;endl;
  cout&lt;&lt;&quot;a * b = &quot;&lt;&lt;(a*b)&lt;&lt;endl;
}
</code></pre>
<p>Ausgabe:</p>
<blockquote>
<p>a = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999<br />
b = 9999999999999999999999999999999999999999999999999999999999999999999999999999<br />
99999999999999999999999<br />
a + b = 199999999999999999999999999999999999999999999999999999999999999999999999<br />
9999999999999999999999999998<br />
a * b = 999999999999999999999999999999999999999999999999999999999999999999999999<br />
99999999999999999999999999800000000000000000000000000000000000000000000000000000<br />
0000000000000000000000000000000000000000000001</p>
</blockquote>
<p>Desweiteren werden auch noch Ganzzahlen und Brüche unterstützt.</p>
<p>boost::lexical_cast sollte funktionieren da es sich ja der iostreams bedient um die Konvertirung zu machen. Hab es aber noch nicht ausprobiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041166</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Thu, 20 Apr 2006 10:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 10:25:15 GMT]]></title><description><![CDATA[<p>Lord Apophis schrieb:</p>
<blockquote>
<p>Da sehe ich nur eine Problem: das einzige das mir einfällt um sowas zu proggen ist ASM, oder kann C++ einen über Über- bzw. Unterläufe informiren?</p>
</blockquote>
<p>Da gebe ich dir recht. Mit ASM ist es sicherlich schoener zu progen.<br />
Aber mit &quot;nur&quot; C++ ist es auch moeglich.</p>
<p>Ich habe grossen respeckt zu C++. Eine sehr maechtige Sprache.</p>
<p>hab noch ne frage zu:</p>
<pre><code>res&amp;0xFF
</code></pre>
<p>0xFF ist hex und steht fuer 2^8 = 256 (?)<br />
Was hat das hier fuer einen effekt?</p>
<p>Gg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041192</guid><dc:creator><![CDATA[xGhost]]></dc:creator><pubDate>Thu, 20 Apr 2006 10:25:15 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 10:29:18 GMT]]></title><description><![CDATA[<p>xGhost schrieb:</p>
<blockquote>
<p>hab noch ne frage zu:</p>
<pre><code>res&amp;0xFF
</code></pre>
<p>0xFF ist hex</p>
</blockquote>
<p>ja</p>
<blockquote>
<p>und steht fuer 2^8 = 256 (?)</p>
</blockquote>
<p>nein 2^8-1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041195</guid><dc:creator><![CDATA[BigNeal]]></dc:creator><pubDate>Thu, 20 Apr 2006 10:29:18 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 10:29:52 GMT]]></title><description><![CDATA[<p>Nein, 0xFF = 255 - und mit der Anweisung werden alle höherwertigen Bytes des Wertes zurückgesetzt. (alternativ könnte auch &quot;res%256&quot; und &quot;res/256&quot; verwendet werden)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041198</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 10:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 10:33:03 GMT]]></title><description><![CDATA[<p>xGhost schrieb:</p>
<blockquote>
<p>0xFF ist hex und steht fuer 2^8 = 256 (?)<br />
Was hat das hier fuer einen effekt?</p>
</blockquote>
<p>Es soll wohl das höherwertige Byte von res 0 setzen, aber wenn &quot;make_pair&quot; nen char als Argument nehmen würde könnte man sich das doch sparen oder?<br />
Oder wird beim typecast nicht einfach der höherwertige Teil abgeschnitten?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041199</guid><dc:creator><![CDATA[Lord Apophis]]></dc:creator><pubDate>Thu, 20 Apr 2006 10:33:03 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 10:36:57 GMT]]></title><description><![CDATA[<p>Lord Apophis schrieb:</p>
<blockquote>
<p>Oder wird beim typecast nicht einfach der höherwertige Teil abgeschnitten?</p>
</blockquote>
<p>Ja, wird - aber sicher ist sicher <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/1041202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041202</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 10:36:57 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 11:04:25 GMT]]></title><description><![CDATA[<p>Der beste Weg einen Überlauf zu behandeln ist ihn gar nicht erst statt finden zu lassen. Beispiel:</p>
<pre><code class="language-cpp">bool add_one(unisgned&amp;num){
  if(num == std::numeric_limits&lt;unsigned&gt;::max()){
    num = 0;
    return true; // overflow
  }else{
    ++num;
    return false; // no overflow
  }  
}
</code></pre>
<p>Herauszufinden ob eine normal Addition überläuft geht gensauso leicht auch wenn die Herleitung ein wenig Mathe erfordert.</p>
<pre><code class="language-cpp">bool add_to(unsigned&amp;a, unsigned b){
  unsigned can_add = std::numeric_limits&lt;unsigned&gt;::max() - a;
  if(b &lt;= can_add){ // no overflow
    a += b;
    return false;
  }else{ // overlow
    // a := a + b - (std::numeric_limits&lt;unsigned&gt;::max() + 1)
    // a := b - (std::numeric_limits&lt;unsigned&gt;::max() - a + 1)
    // a := b - (can_add + 1)
    // a := b - can_add - 1
    // will not underflow because b &gt; can_add (== !(b &lt;= can_add)) and 
    // we substract can_add+1 so the minimal possible value is 0.
    a = b - can_add - 1;
    return true;
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1041215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041215</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Thu, 20 Apr 2006 11:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 11:07:35 GMT]]></title><description><![CDATA[<p>So, und jetzt versuch' mal, das selbe für die Multiplikation zweier Zahlenwerte zu realisieren <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/1041221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041221</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 11:07:35 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 11:11:37 GMT]]></title><description><![CDATA[<p>stimmt das 2^8 = 255<br />
0xFF hat sind volle 2 x 4bit</p>
<p>Das mit GMP geht, nur mein linker will -lgmp -lgmpxx nicht schlucken.<br />
muss halt den vollen pfad mitgeben.</p>
<p>Also wenn ich das richig verstanden habe,<br />
werden die zahlen in ein vector&lt;char&gt; abgelegt,<br />
und bei einer adition einfach der &quot;reihe&quot; nach addiert (mit uebertrag).<br />
coole idee.</p>
<p>Bon Mittag,<br />
Gg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041223</guid><dc:creator><![CDATA[xGhost]]></dc:creator><pubDate>Thu, 20 Apr 2006 11:11:37 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 11:15:23 GMT]]></title><description><![CDATA[<p>xGhost schrieb:</p>
<blockquote>
<p>2^8 = 255</p>
</blockquote>
<p><strong>falsch</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041225</guid><dc:creator><![CDATA[BigNeal]]></dc:creator><pubDate>Thu, 20 Apr 2006 11:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 11:37:45 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>So, und jetzt versuch' mal, das selbe für die Multiplikation zweier Zahlenwerte zu realisieren <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>
</blockquote>
<p>Natürlich geht das da nicht aber das liegt nicht daran, dass es schwer ist herauszufinden, dass eine Multiplikation überläuft (was es wahrscheinlich nicht einmal ist) sonder, dass diese Information wertlos ist.</p>
<p>Nehmen wir das Zehnersystem mal Beispiel. Egal welche 2 Zifferen du zusammen ziehst, der Zehner ist entweder 1 oder 0. Dies gilt auch wenn man den Overflow der verherigen Zahlen betrachtest. Bei der Multiplikation bringt dir die Information ob es überläuft gar nichts, da der Zehner mehr als 2 Werte annehmen kann. Desweiteren kann man anders als bei der Addition die Zifferen auch nicht positionsunabhängig behandeln.</p>
<p>xGost schrieb:</p>
<blockquote>
<p>Also wenn ich das richig verstanden habe,<br />
werden die zahlen in ein vector&lt;char&gt; abgelegt,</p>
</blockquote>
<p>Aus Performangründen ist vector&lt;unsigned long long&gt; oder vector&lt;unsigned long&gt; wahrscheinlicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041237</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Thu, 20 Apr 2006 11:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Thu, 20 Apr 2006 11:58:18 GMT]]></title><description><![CDATA[<p>BigNeal schrieb:</p>
<blockquote>
<p>xGhost schrieb:</p>
<blockquote>
<p>2^8 = 255</p>
</blockquote>
<p><strong>falsch</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
</blockquote>
<p>0xFF = 2x 2^4 = 2^8 = zahlenstrahl 0 - 255</p>
<p>0x00 = 0000.0000 = 0<br />
0x01 = 0000.0001 = 1<br />
0x02 = 0000.0010 = 2<br />
0x03 = 0000.0011 = 3<br />
0x04 = 0000.0100 = 4<br />
0x05 = 0000.0101 = 5<br />
0x06 = 0000.0110 = 6<br />
0x07 = 0000.0111 = 7<br />
0x08 = 0000.1000 = 8<br />
0x09 = 0000.1001 = 9<br />
0x0A = 0000.1010 = 10<br />
0x0B = 0000.1011 = 11<br />
0x0C = 0000.1100 = 12<br />
0x0D = 0000.1101 = 13<br />
0x0E = 0000.1110 = 14<br />
0x0F = 0000.1111 = 15<br />
....<br />
0xFF = 1111.1111 = 255</p>
<p>So jetzt sollte es stimmen ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041248</guid><dc:creator><![CDATA[xGhost]]></dc:creator><pubDate>Thu, 20 Apr 2006 11:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Fri, 21 Apr 2006 07:25:44 GMT]]></title><description><![CDATA[<p>Ben04 schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>So, und jetzt versuch' mal, das selbe für die Multiplikation zweier Zahlenwerte zu realisieren <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>
</blockquote>
<p>Natürlich geht das da nicht aber das liegt nicht daran, dass es schwer ist herauszufinden, dass eine Multiplikation überläuft (was es wahrscheinlich nicht einmal ist) sonder, dass diese Information wertlos ist.</p>
<p>Nehmen wir das Zehnersystem mal Beispiel. Egal welche 2 Zifferen du zusammen ziehst, der Zehner ist entweder 1 oder 0. Dies gilt auch wenn man den Overflow der verherigen Zahlen betrachtest. Bei der Multiplikation bringt dir die Information ob es überläuft gar nichts, da der Zehner mehr als 2 Werte annehmen kann. Desweiteren kann man anders als bei der Addition die Zifferen auch nicht positionsunabhängig behandeln.</p>
</blockquote>
<p>Klar, die Multiplikation ist etwas schwieriger, aber lässt sich recht analog zu meiner obigen Addition auch umsetzen.</p>
<blockquote>
<p>xGost schrieb:</p>
<blockquote>
<p>Also wenn ich das richig verstanden habe,<br />
werden die zahlen in ein vector&lt;char&gt; abgelegt,</p>
</blockquote>
<p>Aus Performangründen ist vector&lt;unsigned long long&gt; oder vector&lt;unsigned long&gt; wahrscheinlicher.</p>
</blockquote>
<p>Und für die Übertrag-Behandlung bei der Multiplikation ist ein vector&lt;char&gt; oder vector&lt;short&gt; günstiger - ein short hat definitiv genug Platz, um das Produkt zweier char-Werte aufzunehmen, für das Produkt zweier long long Werte kenne ich keinen ausreichend großen Zahlentyp.</p>
<p>xGhost schrieb:</p>
<blockquote>
<p>0xFF = 2x 2^4 = 2^8 = zahlenstrahl 0 - 255</p>
</blockquote>
<p>Egal wie du es drehst - diese Aussage ist *sorry* Schwachsinn. 0xFF=255. Punkt.</p>
<p>(OK, die darunterstehende Aufzählung stimmt dann)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041676</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 21 Apr 2006 07:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Fri, 21 Apr 2006 07:48:45 GMT]]></title><description><![CDATA[<p>wie wärs wenn du dir net klasse für nen komplexen datentyp schreisbt???<br />
also</p>
<pre><code class="language-cpp">template &lt;class T&gt; class complex
{
...
...
complex(T, T);
...
...
...
T real, im;
...
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1041700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041700</guid><dc:creator><![CDATA[branleb]]></dc:creator><pubDate>Fri, 21 Apr 2006 07:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Fri, 21 Apr 2006 07:52:18 GMT]]></title><description><![CDATA[<p>shade37337 schrieb:</p>
<blockquote>
<p>wie wärs wenn du dir net klasse für nen komplexen datentyp schreisbt???</p>
</blockquote>
<p>Erstens: Was hat diese Klasse mit &quot;große Integer-Werte&quot; zu tun?<br />
Zweitens: Wieso schreiben? Die Klasse gibt es schon (heißt std::complex und lebt im Header &lt;complex&gt;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041703</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 21 Apr 2006 07:52:18 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Fri, 21 Apr 2006 10:28:58 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Klar, die Multiplikation ist etwas schwieriger, aber lässt sich recht analog zu meiner obigen Addition auch umsetzen.</p>
</blockquote>
<p>Da bin ich zwar gespant wie du für die Multiplikation die Information ob es eine Überlauf gibt verwerten kannst.</p>
<p>Meine Klasse macht das folgendermaßen:</p>
<pre><code class="language-cpp">Natural mul(const Natural&amp;a, const Natural&amp;b){
  Natural prod(0);
  unsigned ms_bit = b.get_most_significant_bit_set();
  for(unsigned bit = 0; bit &lt; ms_bit; ++bit)
    if(b.is_bit_set(bit))
      prod += (a&lt;&lt;bit)
  return prod;
}
</code></pre>
<p>Was der Tafelrechung wie ich sie in der Schule gelernt hab angewant auf binär Zahlen entspricht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041843</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Fri, 21 Apr 2006 10:28:58 GMT</pubDate></item><item><title><![CDATA[Reply to mehr als eine 64bit int on Fri, 21 Apr 2006 10:36:32 GMT]]></title><description><![CDATA[<p>Ben04 schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Klar, die Multiplikation ist etwas schwieriger, aber lässt sich recht analog zu meiner obigen Addition auch umsetzen.</p>
</blockquote>
<p>Da bin ich zwar gespant wie du für die Multiplikation die Information ob es eine Überlauf gibt verwerten kannst.</p>
</blockquote>
<pre><code class="language-cpp">pair&lt;char,char&gt; mul_pos(char r,char l)
{
  short res=r*l;
  return make_pair(res&amp;0xFF,res&gt;&gt;8);
}
</code></pre>
<p>Damit muß ich nur noch in einer doppelten Schleife über alle Zahlenstellen gehen und die Werte mittels add_pos() (von oben) zusammenaddieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041845</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 21 Apr 2006 10:36:32 GMT</pubDate></item></channel></rss>