<?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 -&amp;gt; unsigned char -&amp;gt; char]]></title><description><![CDATA[<p>Mal 'ne ganz doofe Frage:<br />
Ist das hier wohl definiert:</p>
<pre><code class="language-cpp">//ISO-8859
char a = 'A';
unsigned char b = reinterpret_cast&lt;unsigned char const &amp;&gt;(a);
char c = reinterpret_cast&lt;char const &amp;&gt;(b);

std::cout &lt;&lt; c &lt;&lt; std::endl; //sicher 'A' als Ausgabe?
</code></pre>
<p><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/289420/char-gt-unsigned-char-gt-char</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 05:43:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289420.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Jul 2011 14:06:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 15:48:21 GMT]]></title><description><![CDATA[<p>Mal 'ne ganz doofe Frage:<br />
Ist das hier wohl definiert:</p>
<pre><code class="language-cpp">//ISO-8859
char a = 'A';
unsigned char b = reinterpret_cast&lt;unsigned char const &amp;&gt;(a);
char c = reinterpret_cast&lt;char const &amp;&gt;(b);

std::cout &lt;&lt; c &lt;&lt; std::endl; //sicher 'A' als Ausgabe?
</code></pre>
<p><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/2088699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088699</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 04 Jul 2011 15:48:21 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 14:14:42 GMT]]></title><description><![CDATA[<p>Ich kann mit keiner Standard Definition dienen, aber reinterpret_cast ändert den Inhalt ja nicht, also sollte es gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088706</guid><dc:creator><![CDATA[&amp;lt;&amp;lt;-&amp;gt;&amp;gt;]]></dc:creator><pubDate>Mon, 04 Jul 2011 14:14:42 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 14:15:06 GMT]]></title><description><![CDATA[<p>Ich würd einiges drauf verwetten, dass da nicht 'A' bei rauskommt und dass das UB ist. Du castest nämlich den char-Wert auf eine Referenz, d.h. der Compiler soll das Bitmuster des char als Bitmuster einer Referenz interpretieren - weiß der Geier was da bei rumkommt... Wenn du das const&amp; bei beiden reinterpret_casts weglässt wirds vielleicht was <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/2088708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088708</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 04 Jul 2011 14:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 14:16:59 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Wenn du das const&amp; bei beiden reinterpret_casts weglässt wirds vielleicht was <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>Dann kompiliert es gar nicht erst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088709</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 04 Jul 2011 14:16:59 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 17:40:14 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Mal 'ne ganz doofe Frage:</p>
</blockquote>
<p>Soo doof kann die Frage gar nicht sein, wenn es widersprüchliche Antworten gibt.</p>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Ist das hier wohl definiert:</p>
<pre><code class="language-cpp">//ISO-8859
char a = 'A';
unsigned char b = reinterpret_cast&lt;unsigned char const &amp;&gt;(a);
char c = reinterpret_cast&lt;char const &amp;&gt;(b);

std::cout &lt;&lt; c &lt;&lt; std::endl; //sicher 'A' als Ausgabe?
</code></pre>
<p><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>
</blockquote>
<p>Ich sag mal ja. Ich wüsste nicht, warum das nicht klappen sollte. Normalerweise sollten einem da die Alarmglocken anspringen, da Du mit dem reinterpret_cast&lt;T&amp;&gt; ganz schnell §3.10/15 verletzen kannst. Aber hier verwendest Du char und 3.10/15 macht für char eine Ausnahme. Außerdem darf man jedes POD-Objekt über unsigned char* &quot;untersuchen&quot;. Nach meinem Verständnis ist garantiert, dass jedes Bitmuster ein gültiger unsigned char-Wert ist (garantiert keine Füllbits).</p>
<p>Anders herum wäre das möglicherweise problematischer, also unsigned char -&gt; char -&gt; unsigned char (per reinterpret_cast&lt;T&amp;&gt;), da ein unsigned char mit Wert 128 ein ungültiges char-Bit-Muster sein könnte (&quot;negative Null&quot; in der Sign+Magnitude-Darstellung). Bin mir da aber nicht sicher. Dein Beispiel sollte jedenfalls problemfrei sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088789</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 04 Jul 2011 17:40:14 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 18:06:39 GMT]]></title><description><![CDATA[<p>Aber wäre es nicht besser, einen <code>static_cast&lt;char&gt;</code> bzw. <code>static_cast&lt;unsigned char&gt;</code> anzuwenden?<br />
Ich habe es jetzt mit den mir zur Verfügung stehenden Compilern getestet und auch immer die &quot;erwartete&quot; Ausgabe erhalten, aber der Umweg über die Referenz sieht irgendwie ...komisch aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088806</guid><dc:creator><![CDATA[yahendrik]]></dc:creator><pubDate>Mon, 04 Jul 2011 18:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 18:31:48 GMT]]></title><description><![CDATA[<p>Oh, das const&amp; hab ich ganz übersehen.</p>
<p>yahendrik schrieb:</p>
<blockquote>
<p>Aber wäre es nicht besser, einen <code>static_cast&lt;char&gt;</code> bzw. <code>static_cast&lt;unsigned char&gt;</code> anzuwenden?<br />
Ich habe es jetzt mit den mir zur Verfügung stehenden Compilern getestet und auch immer die &quot;erwartete&quot; Ausgabe erhalten, aber der Umweg über die Referenz sieht irgendwie ...komisch aus.</p>
</blockquote>
<p>Versuch es mal mit einer größeren &quot;Zahl&quot;, also z.B. ä.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088821</guid><dc:creator><![CDATA[&amp;lt;&amp;lt;-&amp;gt;&amp;gt;]]></dc:creator><pubDate>Mon, 04 Jul 2011 18:31:48 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 18:36:41 GMT]]></title><description><![CDATA[<p>Ja, das habe ich wirklich nicht probiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> , danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088824</guid><dc:creator><![CDATA[yahendrik]]></dc:creator><pubDate>Mon, 04 Jul 2011 18:36:41 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 19:47:13 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Mal 'ne ganz doofe Frage:<br />
Ist das hier wohl definiert:</p>
<pre><code class="language-cpp">//ISO-8859
char a = 'A';
unsigned char b = reinterpret_cast&lt;unsigned char const &amp;&gt;(a);
char c = reinterpret_cast&lt;char const &amp;&gt;(b);

std::cout &lt;&lt; c &lt;&lt; std::endl; //sicher 'A' als Ausgabe?
</code></pre>
<p><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>
</blockquote>
<p>Wohldefiniert (5.2.10/10). Da unsigned char das gleiche Alignment hat wie char, kann hier nichts schiefgehen.<br />
3.10/15 spielt hier gar keine Rolle, da ja nicht mittels b auf den Wert von a zugegriffen wird (was in diesem speziellen Fall allerdings unproblematisch wäre, da Zugriffe über unsigned char immer zulässig sind).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088844</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 04 Jul 2011 19:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 20:09:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
Bist du sicher dass das mit den Referenzen OK geht?<br />
Ich hätte hier Zeiger verwendet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088852</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 Jul 2011 20:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 20:33:29 GMT]]></title><description><![CDATA[<p>also das übliche verfahren wäre doch so:</p>
<pre><code class="language-cpp">/* C */
char blub = 'Ä';
unsigned char u_blub = *((unsigned char*)&amp;blub);
char blub2 = *((char*)&amp;u_blub);

// C++
char foo = 'ä';
unsigned char bar = *(reinterpret_cast&lt;unsigned char*&gt;(&amp;foo));
char foo2 = *(reinterpret_cast&lt;char*&gt;(&amp;bar));
</code></pre>
<p>oder?</p>
<p>also zumindest funktioniert das immer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088868</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Mon, 04 Jul 2011 20:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 21:01:51 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
Bist du sicher dass das mit den Referenzen OK geht?<br />
Ich hätte hier Zeiger verwendet...</p>
</blockquote>
<p>sorry, falsch gelesen, ich meinte so etwas wie</p>
<pre><code class="language-cpp">char a = 'A';
const unsigned char&amp; b = reinterpret_cast&lt;unsigned char const &amp;&gt;(a);
const char&amp; c = reinterpret_cast&lt;char const &amp;&gt;(b);
</code></pre>
<p>Ohne Referenzinitialisierung steht da nat. im Anschluss zum Cast eine l-zu-rvalue Konvertierung, mithin ein Zugriff, für den 3.10/15 zuständig ist.</p>
<p>Ansonsten ist das genau so wie ich das auch immer tun würde. Zum Einen hat das Ganze nichts mit Zeigern als Solchen zu tun, zudem funktioniert die Zeigervariante nicht, sobald ein überladener &amp;-Operator im Spiel ist.<br />
Ich habe nichts gegen die C-Variante, dort geht das nicht anders; für C++ sieht reinterpret_cast+Zeiger immer ein wenig wie gewollt und nicht gekonnt aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088885</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 04 Jul 2011 21:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 21:08:41 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
Bist du sicher dass das mit den Referenzen OK geht?<br />
Ich hätte hier Zeiger verwendet...</p>
</blockquote>
<p>5.2.10 §10 beschreibt ja gerade die Sache mit den Referenzen. Allerdings ist da von lvalues und casts auf <code>T&amp;</code> und nicht auf <code>T const &amp;</code> die Rede. Ich bin mir da nicht sicher, ob <code>const</code> von §2 abgedeckt wird.</p>
<p>Danke auf jeden Fall erstmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088889</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 04 Jul 2011 21:08:41 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 23:11:48 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4465">@Tachyon</a>:<br />
Öh.<br />
Du willst doch hier Werte konvertieren (nicht Referenzen erzeugen), oder?<br />
Und halt so dass der &quot;Round Trip&quot; von &quot;char&quot; zu &quot;unsigned char&quot; zu &quot;char&quot; verlustfrei bleibt.</p>
<p>mMn. ist das ein Fall für memcpy() bzw. Kopieren mittels &quot;unsigned char*&quot;.</p>
<p>Also kurz gesagt, ich hätte es so gemacht wie DrakoXP (C++ Variante).</p>
<p>Der überladene operator &amp; ist ja kein Ding bei eingebauten Typen wie char/unsigned char.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088919</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 Jul 2011 23:11:48 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Mon, 04 Jul 2011 23:18:22 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Außerdem darf man jedes POD-Objekt über unsigned char* &quot;untersuchen&quot;.</p>
</blockquote>
<p>Man darf auch jedes Objekt (bzw. seinen Speicher -- auch nicht-PODs) über unsigned char* überschreiben.<br />
Von daher vermute ich mal dass man auch nicht-PODs über unsigned char* untersuchen darf.</p>
<blockquote>
<p>Anders herum wäre das möglicherweise problematischer, also unsigned char -&gt; char -&gt; unsigned char (per reinterpret_cast&lt;T&amp;&gt;), da ein unsigned char mit Wert 128 ein ungültiges char-Bit-Muster sein könnte (&quot;negative Null&quot; in der Sign+Magnitude-Darstellung)</p>
</blockquote>
<p>Gilt die &quot;jedes Bitmuster OK&quot; Garantie nur für &quot;unsigned char&quot; und nicht für &quot;char&quot;?<br />
Würde mich jetzt etwas wundern, ich hab irgendwie in Erinnerung dass man auch mit nem &quot;char*&quot; jedes Objekt &quot;untersuchen&quot; darf - und das ginge ja nicht, wenn es für &quot;char&quot; ungültige Bitmuster gäbe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088920</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 Jul 2011 23:18:22 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Tue, 05 Jul 2011 06:00:08 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4465">@Tachyon</a>:</p>
<p>mMn. ist das ein Fall für memcpy() bzw. Kopieren mittels &quot;unsigned char*&quot;..</p>
</blockquote>
<p>Würde ich auch so machen, nur ist der Zieltyp von <code>unsigned char -&gt; char ein</code>  <code>std::string</code> , und da kann ich nicht einfach mit <code>memcpy</code> reinkopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2088950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2088950</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 05 Jul 2011 06:00:08 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Tue, 05 Jul 2011 12:22:56 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>3.10/15 spielt hier gar keine Rolle, da ja nicht mittels b auf den Wert von a zugegriffen wird</p>
</blockquote>
<p>Na klar spielt das eine Rolle. Mit b hat das nichts zu tun, aber der Ausdruck reinterpret_cast&lt;char const&amp;&gt;(a) ist ein Lvalue-Ausdruck, der sich Speicher-technisch auf a bezieht, aber einen anderen Typ hat als a. 3.10/15 beschreibt und erlaubt diesen Fall (keine Aliasingprobleme bei char&lt;-&gt;unsigned char). Und reinterpret_cast&lt;T&amp;&gt;(x) ist äquivalent zu (*reinterpret_cast&lt;T*&gt;(&amp;x)).</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Gilt die &quot;jedes Bitmuster OK&quot; Garantie nur für &quot;unsigned char&quot; und nicht für &quot;char&quot;?</p>
</blockquote>
<p>Ich denke schon, dass das gilt. Allerdings habe ich ein Problem mit anderen Zahlendarstellungsformen für negative Ganzzahlen, die mir theoretisch zwei Nullen bieten, &quot;+0&quot; und &quot;-0&quot;:</p>
<pre><code>sign+magnitude  1's complement  &quot;Wert&quot;
--------------------------------------
   00000000        00000000      &quot;+0&quot;
   10000000        11111111      &quot;-0&quot;
</code></pre>
<p>Mit einem vorzeichenbehafteten char kann ich in so einem Fall anhand des Ganbzzahlwertes diese Bitmuster nicht mehr unterscheiden.</p>
<p>Ich gehe aber zZ davon aus, dass, falls die Maschine eine solche &quot;komische&quot; Zahlendarstellung verwendet, char gar nicht vorzeichenbehaftet ist. Ein vorzeichenbehaftetes char kann man sich eigentlich nur mit dem Zweierkomplement erlauben -- denke ich mal.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089075</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 05 Jul 2011 12:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Tue, 05 Jul 2011 15:00:49 GMT]]></title><description><![CDATA[<p>Ich versteh euer Problem nicht.. Warum so hässliche Casts?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
        char a = 'a';
        unsigned char b = a;
        char c = b;
        std::cout &lt;&lt; a &lt;&lt; std::endl;
        std::cout &lt;&lt; b &lt;&lt; std::endl;
        std::cout &lt;&lt; c &lt;&lt; std::endl;
}
</code></pre>
<p><a href="http://ideone.com/RCgMR" rel="nofollow">http://ideone.com/RCgMR</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089146</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 05 Jul 2011 15:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Tue, 05 Jul 2011 15:07:51 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>3.10/15 spielt hier gar keine Rolle, da ja nicht mittels b auf den Wert von a zugegriffen wird</p>
</blockquote>
<p>Na klar spielt das eine Rolle. Mit b hat das nichts zu tun, aber der Ausdruck reinterpret_cast&lt;char const&amp;&gt;(a) ist ein Lvalue-Ausdruck, der sich Speicher-technisch auf a bezieht, aber einen anderen Typ hat als a. 3.10/15 beschreibt und erlaubt diesen Fall (keine Aliasingprobleme bei char&lt;-&gt;unsigned char). Und reinterpret_cast&lt;T&amp;&gt;(x) ist äquivalent zu (*reinterpret_cast&lt;T*&gt;(&amp;x)).</p>
</blockquote>
<p>Ja, ich hatte das bereits korrigiert.</p>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Gilt die &quot;jedes Bitmuster OK&quot; Garantie nur für &quot;unsigned char&quot; und nicht für &quot;char&quot;?</p>
</blockquote>
<p>Ich denke schon, dass das gilt. Allerdings habe ich ein Problem mit anderen Zahlendarstellungsformen für negative Ganzzahlen, die mir theoretisch zwei Nullen bieten, &quot;+0&quot; und &quot;-0&quot;:</p>
<pre><code>sign+magnitude  1's complement  &quot;Wert&quot;
--------------------------------------
   00000000        00000000      &quot;+0&quot;
   10000000        11111111      &quot;-0&quot;
</code></pre>
<p>Mit einem vorzeichenbehafteten char kann ich in so einem Fall anhand des Ganbzzahlwertes diese Bitmuster nicht mehr unterscheiden.</p>
<p>Ich gehe aber zZ davon aus, dass, falls die Maschine eine solche &quot;komische&quot; Zahlendarstellung verwendet, char gar nicht vorzeichenbehaftet ist. Ein vorzeichenbehaftetes char kann man sich eigentlich nur mit dem Zweierkomplement erlauben -- denke ich mal.</p>
<p>kk</p>
</blockquote>
<p>Weder C noch C++ verlangen, dass die Bitkombination 10000000 (Zweierkomplement oder sign+magnitude) bzw. 11111111 (Einserkomplement) - bzw. entsprechend länger wenn chars mehr als 8 bit haben - bei vorzeichenbehafteten chars ein Zahl ist. In keinem Fall handelt es sich aber um eine Trapdarstellung, C99:6.2.6.2/5 bezieht sich nur auf Typen, die keine Zeichentypen sind.</p>
<p>Wenn (in einer bestimmten Implementation) Einserkomplement oder sign+magnitude verwendet wird <em>und</em> die obigen Objektdarstellungen eine Zahl darstellen so handelt es sich um eine negative Null. Rechenregeln und anderes dazu findet sich im C-Standard (C99:6.2.6.2/3).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089151</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 05 Jul 2011 15:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Tue, 05 Jul 2011 15:11:03 GMT]]></title><link>https://www.c-plusplus.net/forum/post/2089153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089153</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 05 Jul 2011 15:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to char -&amp;gt; unsigned char -&amp;gt; char on Tue, 05 Jul 2011 15:18:15 GMT]]></title><description><![CDATA[<p>Achso, jetzt wird mir alles klar. <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/2089156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089156</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 05 Jul 2011 15:18:15 GMT</pubDate></item></channel></rss>