<?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[Bereichsüberschreitung]]></title><description><![CDATA[<p>Ich habe einen unsigned char, der in einer Schleife inkrementiert wird.<br />
Spart ihr euch die Prüfung aufgrund der möglichen Bereichsüberschreitung?</p>
<p>Also so:</p>
<pre><code class="language-cpp">static unsigned char ch = 0;

int main()
{
    while(true)
    {
        //Do something here
        ch++
        //Do something here
    }
    return 0;
}
</code></pre>
<p>Oder prüft ihr:</p>
<pre><code class="language-cpp">static unsigned char ch = 0;

int main()
{
    while(true)
    {
        //Do something here
        if(ch==255)
        {
            ch=0;
        }
        else
        {
            ch++;
        }
        //Do something here
    }
    return 0;
}
</code></pre>
<p>Oder anders?</p>
<p>Gruß<br />
Sigi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266076/bereichsüberschreitung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 14:30:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266076.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 03 May 2010 17:44:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bereichsüberschreitung on Mon, 03 May 2010 17:44:43 GMT]]></title><description><![CDATA[<p>Ich habe einen unsigned char, der in einer Schleife inkrementiert wird.<br />
Spart ihr euch die Prüfung aufgrund der möglichen Bereichsüberschreitung?</p>
<p>Also so:</p>
<pre><code class="language-cpp">static unsigned char ch = 0;

int main()
{
    while(true)
    {
        //Do something here
        ch++
        //Do something here
    }
    return 0;
}
</code></pre>
<p>Oder prüft ihr:</p>
<pre><code class="language-cpp">static unsigned char ch = 0;

int main()
{
    while(true)
    {
        //Do something here
        if(ch==255)
        {
            ch=0;
        }
        else
        {
            ch++;
        }
        //Do something here
    }
    return 0;
}
</code></pre>
<p>Oder anders?</p>
<p>Gruß<br />
Sigi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891890</guid><dc:creator><![CDATA[Slgl]]></dc:creator><pubDate>Mon, 03 May 2010 17:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to Bereichsüberschreitung on Mon, 03 May 2010 17:54:13 GMT]]></title><description><![CDATA[<p>Das kommt ganz darauf an, was ich bezwecken will. Ich weiß normalerweise genau, welchen Wert meine Variablen wann haben. Es kommt nur ganz ganz selten vor, dass ich solche Prüfungen benötige.</p>
<p>Im übrigen ist bei unsigned Datentypen garantiert, dass der Maximalwert + 1 wieder 0 ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891891</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 03 May 2010 17:54:13 GMT</pubDate></item><item><title><![CDATA[Reply to Bereichsüberschreitung on Mon, 03 May 2010 17:57:34 GMT]]></title><description><![CDATA[<blockquote>
<p>Das kommt ganz darauf an, was ich bezwecken will. Ich weiß normalerweise genau, welchen Wert meine Variablen wann haben. Es kommt nur ganz ganz selten vor, dass ich solche Prüfungen benötige.</p>
</blockquote>
<p>Ja, normalerweise schon.. ist hier aber nicht so.</p>
<blockquote>
<p>Im übrigen ist bei unsigned Datentypen garantiert, dass der Maximalwert + 1 wieder 0 ist.</p>
</blockquote>
<p>Kannst Du mir auch sagen, wo das steht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891892</guid><dc:creator><![CDATA[S1g1]]></dc:creator><pubDate>Mon, 03 May 2010 17:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to Bereichsüberschreitung on Mon, 03 May 2010 18:08:40 GMT]]></title><description><![CDATA[<p>S1g1 schrieb:</p>
<blockquote>
<blockquote>
<p>Im übrigen ist bei unsigned Datentypen garantiert, dass der Maximalwert + 1 wieder 0 ist.</p>
</blockquote>
<p>Kannst Du mir auch sagen, wo das steht?</p>
</blockquote>
<p>na, wenn du 1Byte hast: Wertebereich 0 bis 255<br />
wenn du nun 255+1 machst, hast einen Überlauf, und du landest dann natürlich wieder bei 0... was anderes kanns ja auch net sein oO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891894</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 May 2010 18:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to Bereichsüberschreitung on Mon, 03 May 2010 18:10:34 GMT]]></title><description><![CDATA[<p>S1g1 schrieb:</p>
<blockquote>
<blockquote>
<p>Im übrigen ist bei unsigned Datentypen garantiert, dass der Maximalwert + 1 wieder 0 ist.</p>
</blockquote>
<p>Kannst Du mir auch sagen, wo das steht?</p>
</blockquote>
<p>C++ Standard 3.9.1, Absatz 4 schrieb:</p>
<blockquote>
<p>Unsigned integers, declared unsigned, shall obey the laws of arithmetic modulo 2n where n is the number of bits in the value representation of that particular size of integer.</p>
</blockquote>
<p>Zugehörige Randnotiz:</p>
<blockquote>
<p>This implies that unsigned arithmetic does not overflow because a result hat cannot be represented by the resulting unsigned integer type is reduced modulo the number that is one greater than the largest value that can be represented by the resulting unsigned integer type.</p>
</blockquote>
<p>Und char ist ein Integertyp nach den vorhergehenden Absätzen. Es ist dort jedoch <strong>nicht</strong> garantiert, dass char ein unsigned Typ ist. Dies ist implementiergungsabhängig. Will man sicher gehen, gibt es dafür die Typen signed char und unsigned char.</p>
<p>P.S.: Und es ist auch nicht definiert, dass die Bereichsüberschreitung bei unsigned char bei 255 stattfindet. Dies ist bloß der Mindestwert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891896</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 03 May 2010 18:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to Bereichsüberschreitung on Mon, 03 May 2010 18:14:11 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>P.S.: Und es ist auch nicht definiert, dass die Bereichsüberschreitung bei unsigned char bei 255 stattfindet. Dies ist bloß der Mindestwert.</p>
</blockquote>
<p>Hmm, aber ein char hat doch in cpp 8bit oder ?<br />
Was soll dann nach 255 passieren, wenn ein Überlauf nicht stattfinden würde ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891899</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 03 May 2010 18:14:11 GMT</pubDate></item><item><title><![CDATA[Reply to Bereichsüberschreitung on Mon, 03 May 2010 18:18:02 GMT]]></title><description><![CDATA[<p>Ok, danke SeppJ! Das sollte mir genügen.<br />
Imho find ich es trotzdem besser prinzipiell gegen Bereichsgrenzen zu prüfen. Ich denke Du meinst mit Deinem letzten Satz, dass man mit limits.h arbeiten soll oder?</p>
<p>Viele Grüße<br />
Sigi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891901</guid><dc:creator><![CDATA[Slgl]]></dc:creator><pubDate>Mon, 03 May 2010 18:18:02 GMT</pubDate></item><item><title><![CDATA[Reply to Bereichsüberschreitung on Mon, 03 May 2010 18:27:02 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>Hmm, aber ein char hat doch in cpp 8bit oder ?<br />
Was soll dann nach 255 passieren, wenn ein Überlauf nicht stattfinden würde ?</p>
</blockquote>
<p>Nein, 8Bit ist der Mindestwert. Und dann hätte der char nachher eben den Wert 256 und die Bereichsüberschreitung findet beispielweise erst bei 16767 statt.</p>
<p>Wir hatten neulich schon einmal diese Diskussion, da hatte jemand berichtet, dass ihm tatsächlich mal ein System mit 65 Bit chars untergekommen ist.</p>
<p>Slgl schrieb:</p>
<blockquote>
<p>Ok, danke SeppJ! Das sollte mir genügen.<br />
Imho find ich es trotzdem besser prinzipiell gegen Bereichsgrenzen zu prüfen. Ich denke Du meinst mit Deinem letzten Satz, dass man mit limits.h arbeiten soll oder?</p>
</blockquote>
<p>Wenn diese Grenzen für dein Programm wichtig sind: Ja.</p>
<p>Es ist auch möglich, solche Annahmen bei oder vor der Compilierung zu prüfen. Vor der Compilierung prüft man dies häufig mittels von Installationsskripts (siehe beispielsweise GNU Autotools), während der Compilierung kann man dies mittels Template-Metaprogrammierung überprüfen. Letzteres ist jedoch nicht ganz einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891906</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 03 May 2010 18:27:02 GMT</pubDate></item></channel></rss>