Dezimal zu 2er Komplement

Gast #2062169
Lesenswert?
• ▲
▼
Hallo zusammen,

zu meiner Schande schaffe ich es nicht eine negative Dezimalzahl ins 2er 
Komplement umzurechnen.
Hier meine Umrechnungsfunktion:
1
uint8_t dec2comp(int8_t value)
2
{
3
    uint8_t x;
4
    if(value < 0)
5
    {
6
        x = ~value;
7
        x++;
8
    }
9
    else
10
        x = value;
11

12
    return x;
13
}

Ich benötige dies um einen MMA7455 Beschleunigungsensor zu kalibrieren.
Wenn die umzuwandelnden Werte positiv sind, funktioniert meine 
Kalibrierungsroutine. Falls sie negativ sind, klappt es nicht.

Daraus folgere ich dass ich korrekt in die Register des 
Beschleunigungssensors schreibe.

Hat jemand von euch eine Idee?
#2062198
Lesenswert?
• ▲
▼
Alex schrieb:
> zu meiner Schande schaffe ich es nicht eine negative Dezimalzahl ins 2er
> Komplement umzurechnen.

Ich glaube hier ist ein Denkfehler. Normalerweise sind negative Zahlen 
IMMER in 2er Komplement Binaer-Darstellung.

Du kannst also vermutlich einfach 'value' benutzen, ganz ohne 
"Umrechnung".

Was Deine Funktion macht ist, alle negativen Zahlen in positive 
umzuwandeln, d.h. das Vorzeichen "wegzuschmeissen" ("Betragsfunktion", 
engl. "ABS").

ZigZeg
Moderator (Firma: Titel) Persönliche Seite #2062231
Lesenswert?
• ▲
▼
Alex schrieb:
> zu meiner Schande schaffe ich es nicht eine negative Dezimalzahl ins 2er
> Komplement umzurechnen.
Du willst vermutlich einfach den Betrag der Beschleunigung?
Dann dürfte das hier Sinn machen:
1
   if (value<0) x = -value;
2
   else         x = value;

BTW:
Die Zahlendarstellung aus dem DB kommt von Verilog:
10 Bit Darstellung:
Signed byte data (2’s complement): 0g = 10’h000
8 Bit Darstellung:
Signed byte data (2’s complement): 0g = 8’h00

Breite_'_Basis_Wert ==>
10 Bits, Hex 000 = 10'h000
8 Bits, Hex 00   = 8'h00

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.