<?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[Char to unsigned int]]></title><description><![CDATA[<p>Hi,</p>
<p>kann mir von euch vllt einer erklähren warum bitte ich bei der Konvertierung von einem char zu unsigned int einen negativen Wert bekomme?????</p>
<pre><code>[cpp]
int i = (unsigned int) c;
std::cout &lt;&lt; i &lt;&lt; &quot; &quot; &lt;&lt; c &lt;&lt; std::endl;
[/cpp]
</code></pre>
<p>In meinem char c steht ein ü. Als Ausgabe bekomme ich:</p>
<blockquote>
<p>-97 ü</p>
</blockquote>
<p>Als Compiler benutze ich den GCC CPP Compiler.<br />
Wie bitte kann unsigned einen negativen Wert liefern?!?!?!</p>
<p>Gruß Passi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279454/char-to-unsigned-int</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 13:29:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279454.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Dec 2010 11:08:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 11:08:15 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>kann mir von euch vllt einer erklähren warum bitte ich bei der Konvertierung von einem char zu unsigned int einen negativen Wert bekomme?????</p>
<pre><code>[cpp]
int i = (unsigned int) c;
std::cout &lt;&lt; i &lt;&lt; &quot; &quot; &lt;&lt; c &lt;&lt; std::endl;
[/cpp]
</code></pre>
<p>In meinem char c steht ein ü. Als Ausgabe bekomme ich:</p>
<blockquote>
<p>-97 ü</p>
</blockquote>
<p>Als Compiler benutze ich den GCC CPP Compiler.<br />
Wie bitte kann unsigned einen negativen Wert liefern?!?!?!</p>
<p>Gruß Passi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999231</guid><dc:creator><![CDATA[Ppp]]></dc:creator><pubDate>Mon, 27 Dec 2010 11:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 11:39:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">/* --&gt; */ unsigned /* &lt;-- */ int i = (unsigned int) c;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1999241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999241</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 27 Dec 2010 11:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 12:08:15 GMT]]></title><description><![CDATA[<p>huhu,</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    /*
        Wertebereich von signed char: -128 bis 127

        --&gt;Laut ASCII Tabelle hat 'ü' den Wert 129.
            --&gt; Überlauf um 2, und du landest bei -127

        Wenn du nun -127 in ein signed int speicherst, hast du halt was negatives. 
    */
    signed char c = 129; // Überlauf um 2
    int i = c; // i = -127

    cin.get();
    return 0;
}
</code></pre>
<p>Wieso du -97 hast verstehe ich grad irgendwie nicht <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>
<p>gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999250</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 27 Dec 2010 12:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 12:57:39 GMT]]></title><description><![CDATA[<p>Ppp schrieb:</p>
<blockquote>
<p>kann mir von euch vllt einer erklähren warum bitte ich bei der Konvertierung von einem char zu unsigned int einen negativen Wert bekomme?????</p>
<pre><code class="language-cpp">int i = (unsigned int) c;
std::cout &lt;&lt; i &lt;&lt; &quot; &quot; &lt;&lt; c &lt;&lt; std::endl;
</code></pre>
<p>In meinem char c steht ein ü. Als Ausgabe bekomme ich:</p>
<blockquote>
<p>-97 ü</p>
</blockquote>
<p>Als Compiler benutze ich den GCC CPP Compiler.<br />
Wie bitte kann unsigned einen negativen Wert liefern?!?!?!</p>
</blockquote>
<p>Du rufst undefiniertes Verhalten hervor. Wenn das Verhalten nicht definiert ist, kann das, was da rauskommt, auch nicht falsch sein. Das Problem ist hier, dass der uint-Wert, der da rauskommt, nicht in ein int passt.</p>
<p>vorzeichenbehaftet -&gt; vorzeichenlos ist unproblematisch. Der Wert der rauskommt ist gleich dem Original modulo 2^N, wobei N die Zahl der Bits des Zieltyps ist. -97 nach unsigned int wird also 2^32-97, falls int 32 bit hat.</p>
<p>vorzeichenlos -&gt; vorzeichenbehaftet ist nur dann erlaubt, falls der Wert auch darstellbar ist. Wenn nicht --&gt; undefiniertes Verhalten. In den meisten Fällen wird das Bitmuster einfach neuinterpretiert und Du bekommst wieder eine negative Zahl in deinem Fall.</p>
<p>Das, was Du machen wolltest, muss so aussehen:</p>
<pre><code class="language-cpp">char c = ...;
  int i = static_cast&lt;unsigned int&gt;(c) &amp; 0xFF;
</code></pre>
<p>(angenommen, dass Du CHAR_BIT==8 erwartest)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999268</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 27 Dec 2010 12:57:39 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 12:55:15 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{
    /*
        Wertebereich von signed char: -128 bis 127
</code></pre>
</blockquote>
<p>Falsch. Der Wertebereich umfasst mindestens -127...127, möglicherweise aber auch mehr.</p>
<p>Dweb schrieb:</p>
<blockquote>
<pre><code class="language-cpp">--&gt;Laut ASCII Tabelle hat 'ü' den Wert 129.
            --&gt; Überlauf um 2, und du landest bei -127
</code></pre>
</blockquote>
<p>Eine solche Zuweisung liefert undefiniertes Verhalten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999269</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 27 Dec 2010 12:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 15:50:59 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>vorzeichenbehaftet -&gt; vorzeichenlos ist unproblematisch. Der Wert der rauskommt ist gleich dem Original modulo 2^N, wobei N die Zahl der Bits des Zieltyps ist. -97 nach unsigned int wird also 2^32-97, falls int 32 bit hat.</p>
<p>vorzeichenlos -&gt; vorzeichenbehaftet ist nur dann erlaubt, falls der Wert auch darstellbar ist. Wenn nicht --&gt; undefiniertes Verhalten. In den meisten Fällen wird das Bitmuster einfach neuinterpretiert und Du bekommst wieder eine negative Zahl in deinem Fall.</p>
<p>Das, was Du machen wolltest, muss so aussehen:</p>
<pre><code class="language-cpp">char c = ...;
  int i = static_cast&lt;unsigned int&gt;(c) &amp; 0xFF;
</code></pre>
<p>(angenommen, dass Du CHAR_BIT==8 erwartest)</p>
</blockquote>
<p>ok, das wusst ich nicht. Wieder was gelernt :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999332</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 27 Dec 2010 15:50:59 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 21:21:35 GMT]]></title><description><![CDATA[<p>Warum nicht</p>
<pre><code class="language-cpp">unsigned int i = static_cast&lt;unsigned char&gt;(c);   //hier kommt ein positiver Wert von 0 bis 255 raus
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">int i = c;   //hier kommt ein Wert von -128 bis 127 raus
</code></pre>
<p>@krümelkracker: Warum sollte -128 nicht möglich sein?</p>
<p>Ist eine dieser Varianten undefiniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999478</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Mon, 27 Dec 2010 21:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 22:32:27 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Warum nicht</p>
<pre><code class="language-cpp">unsigned int i = static_cast&lt;unsigned char&gt;(c);   //hier kommt ein positiver Wert von 0 bis 255 raus
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">int i = c;   //hier kommt ein Wert von -128 bis 127 raus
</code></pre>
<p>@krümelkracker: Warum sollte -128 nicht möglich sein?</p>
<p>Ist eine dieser Varianten undefiniert?</p>
</blockquote>
<p>Er hat nicht gesagt, dass -128 nicht möglich ist, sondern dass nur -127 bis 127 garantiet werden. Alles andere ist implementationsabhängig [-128,127], [-127,128].<br />
Übrigens ist es auch implementationsabhängig, ob char als unsigned char oder signed char behandelt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999501</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Mon, 27 Dec 2010 22:32:27 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Mon, 27 Dec 2010 23:02:34 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Warum nicht</p>
<pre><code class="language-cpp">unsigned int i = static_cast&lt;unsigned char&gt;(c);   //hier kommt ein positiver Wert von 0 bis 255 raus
</code></pre>
</blockquote>
<p>...kannste machen...</p>
<p>wxSkip schrieb:</p>
<blockquote>
<p>oder</p>
<pre><code class="language-cpp">int i = c;   //hier kommt ein Wert von -128 bis 127 raus
</code></pre>
</blockquote>
<p>Nicht unbedingt. Ob char vorzeichenbehaftet ist oder nicht, ist nicht festgelegt. Du weißt, dass &quot;signed char&quot; und &quot;char&quot; zwei verschiedene Typen sind, ja?</p>
<p>wxSkip schrieb:</p>
<blockquote>
<p>@krümelkracker: Warum sollte -128 nicht möglich sein?</p>
</blockquote>
<p>Siehe C bzw C++ Standard. Er erlaubt neben dem Zweierkomplement auch andere Zahlendarstellungen wie das Einerkomplement oder die Vorzeichen-Betrag-Darstellung.</p>
<p>wxSkip schrieb:</p>
<blockquote>
<p>Ist eine dieser Varianten undefiniert?</p>
</blockquote>
<p>Das zweite könnte u.U. undefiniertes Verhalten hervorrufen -- nämlich wenn INT_MAX &lt; CHAR_MAX gilt. Das ist zwar weit hergeholt, aber durchaus möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999508</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 27 Dec 2010 23:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Tue, 28 Dec 2010 01:00:21 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>wxSkip schrieb:</p>
<blockquote>
<p>Ist eine dieser Varianten undefiniert?</p>
</blockquote>
<p>Das zweite könnte u.U. undefiniertes Verhalten hervorrufen -- nämlich wenn INT_MAX &lt; CHAR_MAX gilt. Das ist zwar weit hergeholt, aber durchaus möglich.</p>
</blockquote>
<p>Wie das? Der Datentyp int belegt mindestens soviel Speicher wie der Datentyp char und genug um jeden Wert des Intervalls [INT_MIN, INT_MAX] aufnehmen zu können. Dann kann CHAR_MAX nicht grösser sein als INT_MAX.</p>
<p>Nachtrag: Vergiss die Frage - würde prinzipiell natürlich gehen.<br />
INT_MIN = -127<br />
INT_MAX = 127</p>
<p>CHAR_MIN = 0<br />
CHAR_MAX = 255</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999521</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Tue, 28 Dec 2010 01:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Tue, 28 Dec 2010 08:29:49 GMT]]></title><description><![CDATA[<p>inter2k3 schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Das zweite könnte u.U. undefiniertes Verhalten hervorrufen -- nämlich wenn INT_MAX &lt; CHAR_MAX gilt. Das ist zwar weit hergeholt, aber durchaus möglich.</p>
</blockquote>
<p>Wie das? Der Datentyp int belegt mindestens soviel Speicher wie der Datentyp char und genug um jeden Wert des Intervalls [INT_MIN, INT_MAX] aufnehmen zu können. Dann kann CHAR_MAX nicht grösser sein als INT_MAX.</p>
<p>Nachtrag: Vergiss die Frage - würde prinzipiell natürlich gehen.<br />
INT_MIN = -127<br />
INT_MAX = 127</p>
<p>CHAR_MIN = 0<br />
CHAR_MAX = 255</p>
</blockquote>
<p>So in etwa, nur dass int mindestens 16 bit breit ist. Ich habe da an<br />
INT_MIN = -32768<br />
INT_MAX = 32767<br />
CHAR_MIN = 0<br />
CHAR_MAX = 65535<br />
gedacht. Ob es so etwas aber wirklich gibt, weiß ich nicht. Möglich wär es aber (und standardkonform).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1999551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999551</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 28 Dec 2010 08:29:49 GMT</pubDate></item><item><title><![CDATA[Reply to Char to unsigned int on Tue, 28 Dec 2010 18:46:16 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>wxSkip schrieb:</p>
<blockquote>
<p>oder</p>
<pre><code class="language-cpp">int i = c;   //hier kommt ein Wert von -128 bis 127 raus
</code></pre>
</blockquote>
<p>Nicht unbedingt. Ob char vorzeichenbehaftet ist oder nicht, ist nicht festgelegt. Du weißt, dass &quot;signed char&quot; und &quot;char&quot; zwei verschiedene Typen sind, ja?</p>
</blockquote>
<p>Ja, habe ich aber dabei wohl &quot;übersehen&quot; <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/1999751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1999751</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Tue, 28 Dec 2010 18:46:16 GMT</pubDate></item></channel></rss>