<?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[Multiplikation mit short int * short int über short int Zahlenbereich hinaus]]></title><description><![CDATA[<p>Hallo, habe gerade folgende fkt. geschrieben:</p>
<p>*************</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

short Mult (unsigned short x, unsigned short y)

{
    return (x*y);
}
int main()
{
std::cout &lt;&lt; Mult(256,257);
std::cin.get();

return 0;
}
</code></pre>
<p>****************</p>
<p>256 * 257 ist &gt; 65792. Das ist 257 größer als die laut &quot;jetzt lerne ich c++ buch&quot; größte short int unsigned = 65535. Aber im standardausgabemedium von borland c++builder x krieg ich 256 raus. Ich hatte einen Programmabsturz erwartet. Aber wenn er (bei unkritischer Betrachtung) einen zunächst &quot;vertrauensvoll&quot; wirkenden Wert auswirft (256) ist die nutzung von unsigne short int ggü unsigned long int doch eh nimmer zu emfpehlen oder??.</p>
<p>weil ich 256 rauskrieg müsste 65536 die größte short unsigned int sein. aber da auch 0 unsigned short int ist hätte die menge der unsigned short ints dann 65537 zahlen &gt; 2exp16 --&gt; &gt; 2 Byte. also falsche Aussage. Wer kllärt mich auf?</p>
<p>***************************</p>
<p>Frage: in excel 03 gibt´s 65536 zeilen. hat das was mit der menge der short unsigend int zahlen zu tun?</p>
<p>gruss kasimirle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171379/multiplikation-mit-short-int-short-int-über-short-int-zahlenbereich-hinaus</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 09:59:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171379.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Jan 2007 21:13:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multiplikation mit short int * short int über short int Zahlenbereich hinaus on Wed, 24 Jan 2007 21:13:04 GMT]]></title><description><![CDATA[<p>Hallo, habe gerade folgende fkt. geschrieben:</p>
<p>*************</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

short Mult (unsigned short x, unsigned short y)

{
    return (x*y);
}
int main()
{
std::cout &lt;&lt; Mult(256,257);
std::cin.get();

return 0;
}
</code></pre>
<p>****************</p>
<p>256 * 257 ist &gt; 65792. Das ist 257 größer als die laut &quot;jetzt lerne ich c++ buch&quot; größte short int unsigned = 65535. Aber im standardausgabemedium von borland c++builder x krieg ich 256 raus. Ich hatte einen Programmabsturz erwartet. Aber wenn er (bei unkritischer Betrachtung) einen zunächst &quot;vertrauensvoll&quot; wirkenden Wert auswirft (256) ist die nutzung von unsigne short int ggü unsigned long int doch eh nimmer zu emfpehlen oder??.</p>
<p>weil ich 256 rauskrieg müsste 65536 die größte short unsigned int sein. aber da auch 0 unsigned short int ist hätte die menge der unsigned short ints dann 65537 zahlen &gt; 2exp16 --&gt; &gt; 2 Byte. also falsche Aussage. Wer kllärt mich auf?</p>
<p>***************************</p>
<p>Frage: in excel 03 gibt´s 65536 zeilen. hat das was mit der menge der short unsigend int zahlen zu tun?</p>
<p>gruss kasimirle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216429</guid><dc:creator><![CDATA[kasimirle]]></dc:creator><pubDate>Wed, 24 Jan 2007 21:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit short int * short int über short int Zahlenbereich hinaus on Wed, 24 Jan 2007 21:26:38 GMT]]></title><description><![CDATA[<p>Also, unsigned short ist in der Regel zwei bytes groß,<br />
daher kann 2^16 = 65536 verschiedene Werte annehmen, also 0 bis 2^16 - 1.<br />
Betrachten wir jetzt 256 * 257, dann ist das 256<em>256 + 256 = 2 ^ 16 + 256.<br />
256</em>256 = 2^16, da erhälst du wieder 0. also 2^16-1 der größte Wert aus dem Wertebereich von unsigned short. Wenn man das ganze hexadezimal betrachet, dann sieht das noch schöner aus:<br />
0x100 = 256, 0x101 = 257, 0x10000 = 2^16, 0x10100 = 2^16 + 256<br />
0x100 * 0x101 = 0x10100 (intern werden jetzt einfach nur die unteresten 4 hexadezimal ziffern betrachet, entsprechen 16 bits)<br />
0x100 * 0x101 = 0x0100 = 256.</p>
<blockquote>
<p>Aber wenn er (bei unkritischer Betrachtung) einen zunächst &quot;vertrauensvoll&quot; wirkenden Wert auswirft (256) ist die nutzung von unsigne short int ggü unsigned long int doch eh nimmer zu emfpehlen oder??.</p>
</blockquote>
<p>Also ich persönlich verwende selten shorts, ihr einziger vorteil ist imho auch, das sie halb soviel speicher benötigen, wie ein int. Multiplikation von shorts, ist in der Regel keine gute Idee, außer man weiß, was man tut. Der Wertebereich ist multiplikativ schnell überschritten.</p>
<blockquote>
<p>Frage: in excel 03 gibt´s 65536 zeilen. hat das was mit der menge der short unsigend int zahlen zu tun?</p>
</blockquote>
<p>Vielleicht, vielleicht auch nicht. Es kann auch daran liegen, das es maximal<br />
2^32 zellen = 65536 zeilen * 65536 spalten geben kann.</p>
<p>MfG<br />
DDR-RAM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216442</guid><dc:creator><![CDATA[DDR-RAM]]></dc:creator><pubDate>Wed, 24 Jan 2007 21:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit short int * short int über short int Zahlenbereich hinaus on Wed, 24 Jan 2007 22:00:27 GMT]]></title><description><![CDATA[<p>Bei arithmetischen Operationen findet immer zunächst eine integrale Promotion auf int (bzw. unsigned wenn diese dieselbe Größe wie der Typ des Operanden haben) statt. Folglich ist das Ergebnis der Multiplikation mit x=256 und y=257 (tatsächlicher Wert: 65792) in jedem praktischen Falle definiert:<br />
Auf Plattformen mit 16bit ints ist das Ergebnis ein unsigned int mit dem Wert 256;<br />
auf allen anderen Plattformen ist es ein int bzw. unsigned int mit dem Wert 65792</p>
<p>Ausnahme höchtens ein hypothetisches System mit 16bit shorts und 17bit ints - hier wäre tatsächlich die Multiplikation selbst undefiniert.</p>
<p>Problematisch ist die Rückgabe des Ergebnisses. Die Konvertierung in einen vorzeichenbehafteten Typen eines Wertes, der außerhalb des Wertebereichs dieses Typs liegt, ist undefiniert. Definiertes Verhalten erhältst du durch konsequente Verwendung vorzeichenloser Operanden:</p>
<pre><code class="language-cpp">unsigned short Mult (unsigned short x, unsigned short y)

{
    return unsigned(x)*y;
}
int main()
{
std::cout &lt;&lt; Mult(256,257);
std::cin.get();

return 0;
}
</code></pre>
<p>Hier ist das Ergebnis entweder 256 auf Systemen mit 16bit shorts und 65792 sonst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216471</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 24 Jan 2007 22:00:27 GMT</pubDate></item></channel></rss>