<?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[Endian - Vorzeichen ermitteln]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich suche nach einer eleganten Möglichkeit, das Vorzeichen einer Zahl zu ermitteln. Im Endian-Header &lt;endian.h&gt; (Linux) erfahre ich mehr über das verwendete System.</p>
<p>Aber, wie bekomme ich das Vorzeichen einer Zahl?</p>
<pre><code class="language-cpp">int i;
if(i &lt; 0) ....
// Naja, elegant ist das nicht
</code></pre>
<p>Wie sieht die Maske für das Abschneiden des Vorzeichen mittels &amp; für Big-Endian aus?<br />
Oder hat der GCC bzw. C++ Standard bereits Methoden hinterlegt?</p>
<p>Gruß<br />
Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248512/endian-vorzeichen-ermitteln</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Apr 2026 20:41:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248512.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 Aug 2009 20:52:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Tue, 25 Aug 2009 20:52:29 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich suche nach einer eleganten Möglichkeit, das Vorzeichen einer Zahl zu ermitteln. Im Endian-Header &lt;endian.h&gt; (Linux) erfahre ich mehr über das verwendete System.</p>
<p>Aber, wie bekomme ich das Vorzeichen einer Zahl?</p>
<pre><code class="language-cpp">int i;
if(i &lt; 0) ....
// Naja, elegant ist das nicht
</code></pre>
<p>Wie sieht die Maske für das Abschneiden des Vorzeichen mittels &amp; für Big-Endian aus?<br />
Oder hat der GCC bzw. C++ Standard bereits Methoden hinterlegt?</p>
<p>Gruß<br />
Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766691</guid><dc:creator><![CDATA[Siassei]]></dc:creator><pubDate>Tue, 25 Aug 2009 20:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Tue, 25 Aug 2009 20:57:24 GMT]]></title><description><![CDATA[<p>Ist es etwa eleganter eine kilometerlange Funktion dafür aufzurufen? <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="😉"
    /> Also ich glaube kaum, dass es dafür extra eine Funktion gibt und unelegant finde ich die Lösung mit if auch nicht unbedingt. Bei Google hab ich auf die schnelle auch nichts gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766695</guid><dc:creator><![CDATA[-insane- 0]]></dc:creator><pubDate>Tue, 25 Aug 2009 20:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Tue, 25 Aug 2009 21:21:09 GMT]]></title><description><![CDATA[<p>Naja, ich möchte das Rad nicht neu erfinden. Leider kenne ich die gesamte Lib. nicht auswendig. Ich meine, dass es da was gibt. Big und liitle gibt es ja nicht seit gestern.</p>
<p>Methoden aufrufe bzw. Makros stören mich nicht. Leserlichkeit und Sauberkeit stehen an erster Stelle. Denn Rest muss der Compiler erledigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766708</guid><dc:creator><![CDATA[Siassei]]></dc:creator><pubDate>Tue, 25 Aug 2009 21:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Tue, 25 Aug 2009 21:38:43 GMT]]></title><description><![CDATA[<p>Gibt es etwas sauberes als x&lt;0?</p>
<p>Hier, sogar als Funktion:</p>
<pre><code class="language-cpp">bool isNegative(int x)
{
    return x&lt;0;
}
</code></pre>
<p>Außerdem ist meiner Meinung nach das Abschneiden des Vorzeichens wesentlich uneleganter. (und mit ziemlicher Sicherheit sogar langsamer)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766716</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 25 Aug 2009 21:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Tue, 25 Aug 2009 22:24:37 GMT]]></title><description><![CDATA[<p>Siassei schrieb:</p>
<blockquote>
<p>ich suche nach einer eleganten Möglichkeit, das Vorzeichen einer Zahl zu ermitteln. [...]</p>
</blockquote>
<p>Was meinst Du mit &quot;ermitteln&quot;? Was ist denn die gewünschte Ausgabe? Wozu brauchst Du das Vorzeichen? Also, was willst Du damit machen?</p>
<p>Siassei schrieb:</p>
<blockquote>
<p>Aber, wie bekomme ich das Vorzeichen einer Zahl?</p>
<pre><code class="language-cpp">int i;
if(i &lt; 0) ....
// Naja, elegant ist das nicht
</code></pre>
</blockquote>
<p>Nicht?! Das kann man nicht so richtig beurteilen. Ich behaupte mal, es hängt davon ab, was Du damit machen willst. Für bestimmte Dinge gibt es ein paar Tricks, mit denen man sich Verzweigungen (if else) sparen kann. Verzweigungen mögen CPUs nicht so gerne. Man kann aber eigentlich davon ausgehen, dass</p>
<pre><code class="language-cpp">bool neg = i&lt;0;
</code></pre>
<p>von einem guten Compiler sehr effizient übersetzt wird. Mein G++ macht daraus für meine Intel-CPU folgende Assembler-Zeile</p>
<pre><code>shr    $0x1f,%eax
</code></pre>
<p>Er shiftet also die Zahl im Register EAX um 31 Bits nach rechts, was nur das Vorzeichenbit übrig lässt, weil EAX ein 32Bit Register ist und Intel-CPUs 2er-Komplement für vorzeichenbehaftete Zahlen nutzen.</p>
<p>Siassei schrieb:</p>
<blockquote>
<p>Wie sieht die Maske für das Abschneiden des Vorzeichen mittels &amp; für Big-Endian aus? Oder hat der GCC bzw. C++ Standard bereits Methoden hinterlegt?</p>
</blockquote>
<p>1. Endianness interessiert hier gar nicht, wenn Du nicht per char* oder unsigned char* auf den int zugreifst.<br />
2. Die Binärdarstellung vorzeichenbehafteter Zahlen wird nicht vom C oder C++ Standard festgelegt. In Frage kommen 1er-Komplement, 2er-Komplement und Vorzeichen+Betrag. Das Verhalten der Operatoren &amp;, |, ^, ~ auf vorzeichenbehaftete Operanden ist also abhängig von Deinem Compiler bzw Deinem Rechner. Du kannst aber einen &quot;signed int s&quot; zu einem &quot;unsigned int u&quot; konvertieren. Diese Konvertierung ist wohldefiniert. Es gilt s = u mod 2^N, wobei N die Anzahl der Bits sind, die für int benutzt werden.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1766728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1766728</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 25 Aug 2009 22:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Wed, 26 Aug 2009 17:51:27 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>im Assembler habe ich noch gar nicht nachgeschaut. Upps <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Was möchte ich machen. Hmmm, ich habe vor ein paar Jahre eine kleine Bibliotheke in Java geschrieben und jetzt muss ich diese nach C++ konvertieren. Grund für die Umstellung ist die Schnittstelle, nicht die Gerüchteküche von Java! Ich liebe es, aber das ist Off-Topic!</p>
<p>Die Algorithmen sind des öfteren komplett in Bit-Operationen umgesetzt und muss daher auf die Endian-Geschichte achten (versch. Plattformen). Ich möchte nicht alles doppelt und dreifach tippen und dabei die Reihenfolge und Co verändern. Daher suche ich nach einer Abfolge bzw. kleine Helferlein die mir das Leben erleichtern.</p>
<p>Da heißt es wohl selbst hand anlegen. Ich wandle jetzt alle Integer's mittels den Makros aus &lt;endian.h&gt; in Little-Endian um. Für spätere Operation z.B. + oder Darstellung in einer Textbox erfolgt eine erneute Wandlung. Die schönste Lösung meiner seits.</p>
<p>Gruß<br />
Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1767205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1767205</guid><dc:creator><![CDATA[Siassei]]></dc:creator><pubDate>Wed, 26 Aug 2009 17:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Wed, 26 Aug 2009 17:58:35 GMT]]></title><description><![CDATA[<p>ist es denn wirklich nötig, das so maschienen-nah zu machen? oder vermutest du nur, dass es dadurch schneller werden könnte?<br />
falls ja: ich würd auf den compiler wetten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1767210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1767210</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 26 Aug 2009 17:58:35 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Wed, 26 Aug 2009 18:03:00 GMT]]></title><description><![CDATA[<p>Ja, da es sich um Array's handelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1767215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1767215</guid><dc:creator><![CDATA[Siassei]]></dc:creator><pubDate>Wed, 26 Aug 2009 18:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Wed, 26 Aug 2009 18:07:16 GMT]]></title><description><![CDATA[<p>Siassei schrieb:</p>
<blockquote>
<p>Ja, da es sich um Array's handelt.</p>
</blockquote>
<p>versteh ich nicht - falls ichs doch verstanden habe, dann hast du mich wohl nicht verstanden ;o)</p>
<p>mach doch ma nen bsp., was deine bibliothek berechnen kann und wie du es implementiert hast - dann schreib ichs mal in C++ und wir gucken, wie viel schneller deins ist (und ob überhaupt)...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1767219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1767219</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 26 Aug 2009 18:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to Endian - Vorzeichen ermitteln on Wed, 26 Aug 2009 18:24:46 GMT]]></title><description><![CDATA[<p>Siassei schrieb:</p>
<blockquote>
<p>Was möchte ich machen. Hmmm, ich habe vor ein paar Jahre eine kleine Bibliotheke in Java geschrieben und jetzt muss ich diese nach C++ konvertieren.<br />
[...]<br />
Die Algorithmen sind des öfteren komplett in Bit-Operationen umgesetzt und muss daher auf die Endian-Geschichte achten (versch. Plattformen).</p>
</blockquote>
<p>Blödsinn. In Java hast Du gar nicht die Möglichkeit, herauszufinden, wie ints im Speicher abgelegt werden. Wenn Du Deinen Java-Code nach C++ übersetzt, spielt Endianness genausowenig eine Rolle. Erst wenn Du auf Deine Ints byte-weise zugreifst macht das einen Unterschied. Aber wie gesagt, das geht ja in Java sowieso nicht. Und warum solltest Du Dir es in C++ unnötig kompliziert machen?</p>
<p>Siassei schrieb:</p>
<blockquote>
<p>Ich möchte nicht alles doppelt und dreifach tippen und dabei die Reihenfolge und Co verändern.</p>
</blockquote>
<p>Musst Du ja auch nicht. Mach's doch genauso wie in Java.</p>
<p>Siassei schrieb:</p>
<blockquote>
<p>Daher suche ich nach einer Abfolge bzw. kleine Helferlein die mir das Leben erleichtern.</p>
</blockquote>
<p>bla, bla, bla. Gib doch mal'n Beispiel.</p>
<p>Siassei schrieb:</p>
<blockquote>
<p>Da heißt es wohl selbst hand anlegen.</p>
</blockquote>
<p>Nicht wirklich.</p>
<p>Siassei schrieb:</p>
<blockquote>
<p>Ich wandle jetzt alle Integer's mittels den Makros aus &lt;endian.h&gt; in Little-Endian um. Für spätere Operation z.B. + oder Darstellung in einer Textbox erfolgt eine erneute Wandlung. Die schönste Lösung meiner seits.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /><br />
So ein Blödsinn. Du denkst viel zu kompliziert.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1767228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1767228</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 26 Aug 2009 18:24:46 GMT</pubDate></item></channel></rss>