<?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[Verbleibende bits eines std::uint64_t werden auf ff gesetzt]]></title><description><![CDATA[<p>Ich kann es nicht besser beschrieben, hier der Code (Win7 Visual Studio 2012):</p>
<pre><code>std::uint8_t da[] = {0xf9, 0xff, 0xff, 0xff};

		std::uint64_t v = 0;
		for(int b=0; b&lt;4; ++b) {
			v |= da[b] &lt;&lt; (b*8);
		}
</code></pre>
<p>0x9f ist das niederwertigste Byte.<br />
Mein Debugger sagt:</p>
<pre><code>0x00000000000000f9
0x000000000000fff9
0x0000000000fffff9
0xfffffffffffffff9
</code></pre>
<p>Waruuuuum warum passiert das ich werde wahnsinnig <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="😕"
    /> Wieso steht da am Ende nicht</p>
<p>0x00000000fffffff9</p>
<p>in v?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320859/verbleibende-bits-eines-std-uint64_t-werden-auf-ff-gesetzt</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 13:14:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320859.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Oct 2013 21:41:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verbleibende bits eines std::uint64_t werden auf ff gesetzt on Mon, 14 Oct 2013 21:41:30 GMT]]></title><description><![CDATA[<p>Ich kann es nicht besser beschrieben, hier der Code (Win7 Visual Studio 2012):</p>
<pre><code>std::uint8_t da[] = {0xf9, 0xff, 0xff, 0xff};

		std::uint64_t v = 0;
		for(int b=0; b&lt;4; ++b) {
			v |= da[b] &lt;&lt; (b*8);
		}
</code></pre>
<p>0x9f ist das niederwertigste Byte.<br />
Mein Debugger sagt:</p>
<pre><code>0x00000000000000f9
0x000000000000fff9
0x0000000000fffff9
0xfffffffffffffff9
</code></pre>
<p>Waruuuuum warum passiert das ich werde wahnsinnig <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="😕"
    /> Wieso steht da am Ende nicht</p>
<p>0x00000000fffffff9</p>
<p>in v?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360333</guid><dc:creator><![CDATA[KaKeinPlan]]></dc:creator><pubDate>Mon, 14 Oct 2013 21:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to Verbleibende bits eines std::uint64_t werden auf ff gesetzt on Mon, 14 Oct 2013 21:44:56 GMT]]></title><description><![CDATA[<p>Beim letzten &quot;da[b] &lt;&lt; (b*8);&quot; hast du (int)0x00000000fffffff9, was eine negative Zahl ist. Beim impliziten Cast in 64-Bit wird das Vorzeichen übernommen, deshalb das seltsame Resultat.</p>
<pre><code class="language-cpp">v |= static_cast&lt;std::::uint64&gt;(da[b]) &lt;&lt; (b*8);
</code></pre>
<p>sollte das Problem beheben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360335</guid><dc:creator><![CDATA[trgdfaeeth]]></dc:creator><pubDate>Mon, 14 Oct 2013 21:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to Verbleibende bits eines std::uint64_t werden auf ff gesetzt on Mon, 14 Oct 2013 21:46:13 GMT]]></title><description><![CDATA[<p>v |= static_cast<a href="std::uint64%5C_t" rel="nofollow">std::uint64\_t</a>(da[b]) &lt;&lt; (b*8);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360337</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 14 Oct 2013 21:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to Verbleibende bits eines std::uint64_t werden auf ff gesetzt on Mon, 14 Oct 2013 21:50:28 GMT]]></title><description><![CDATA[<p>So einfach und doch so nervig... danke sehr <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360338</guid><dc:creator><![CDATA[KaKeinPlan]]></dc:creator><pubDate>Mon, 14 Oct 2013 21:50:28 GMT</pubDate></item><item><title><![CDATA[Reply to Verbleibende bits eines std::uint64_t werden auf ff gesetzt on Mon, 14 Oct 2013 22:33:02 GMT]]></title><description><![CDATA[<p>Und damit auch klar ist warum das hier passiert...</p>
<p>Bevor C++ mit Zahlen rechnet, tut es sie erstmal &quot;promoten&quot;.<br />
Dabei wird aus allem was kleiner ist als ein <code>int</code> ein <code>int</code> (signed!). Auch wenn das kleinere Etwas <code>unsigned</code> war.</p>
<p>Nennt sich &quot;integral promotion&quot;.</p>
<p><a href="http://en.cppreference.com/w/cpp/language/implicit_cast" rel="nofollow">http://en.cppreference.com/w/cpp/language/implicit_cast</a> schrieb:</p>
<blockquote>
<p>Prvalues of small integral types (such as <code>char</code> ) may be converted to prvalues of larger integral types (such as <code>int</code> ).<br />
<strong>In particular, <em>arithmetic operators</em> do not accept types smaller than <code>int</code> as arguments, and integral<br />
promotions are automatically applied.</strong> This conversion always preserves the value.<br />
...</p>
</blockquote>
<p>(Da stehen dann auch die genauen Regeln wie &quot;promoted&quot; wird.)</p>
<p>Beispiel:<br />
<a href="http://ideone.com/wEVZ7t" rel="nofollow">http://ideone.com/wEVZ7t</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360346</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 14 Oct 2013 22:33:02 GMT</pubDate></item></channel></rss>