Umrechnung von "Vorzeichen und Betrag" nach Zweierkomplement

Gast #5635087
Lesenswert?

Leider gibt es noch immer Sensoren, die ihre Werte in "Vorzeichen und 
Betrag"-Darstellung (anstelle Zweierkomplement) zurück liefern.

Wie wandelt man am besten (mit wenig Zyklen, Speicher) um? Ich meine, 
man kann schnell was zusammenhacken, wie (für 16bit):
1
if (wert < 0) wert = ~wert - 32767;

Aber was ist die empfohlene Standardmethode?
#5635232
Lesenswert?

Ron schrieb:
> Wie wandelt man am besten (mit wenig Zyklen, Speicher) um?

Wenn's dir um Zyklen geht, kommt's auf den verwendeten Prozessor an.
Wieviele Millionen Mal pro Sekunde wird das denn aufgerufen?

> Ich meine, man kann schnell was zusammenhacken, wie (für 16bit):
> if (wert < 0) wert  = ~wert - 32767;

Überlauf ist für vorzeichenbehaftete Werte nicht definiert.
Ich würde den Input in einer vorzeichenlosen Variable speichern und das 
Ergebnis in einer zweiten mit Vorzeichen:
1
unsigned short input = ...;
2
short output = input & 0x7FFF;
3
if (input > 0x7FFF)
4
   output = -output;
Gast #5636566
Lesenswert?

Ron schrieb:
> Leider gibt es noch immer Sensoren, die ihre Werte in "Vorzeichen und
> Betrag"-Darstellung (anstelle Zweierkomplement) zurück liefern.
>
> Wie wandelt man am besten (mit wenig Zyklen, Speicher) um? Ich meine,
> man kann schnell was zusammenhacken, wie (für 16bit):
>
1
if (wert < 0) wert = ~wert - 32767;
>
> Aber was ist die empfohlene Standardmethode?

Eine empfohlene Standardmethode kann es naturgemäß nicht geben, wenn es 
um "nichtstandard"-Binär-Representationen geht. Die optimale Methode 
hängt dann natürlich von der konkreten Representation und der konkreten 
Maschine ab, auf der die Wandlung durchgeführt werden soll. Sprich: 
Assembler rules. Jedenfalls dann, wenn die Wandlung mit (beweisbar) 
optimaler Geschwindigkeit erfolgen soll.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren