Vorzeichen bei Variable entfernen

OP #2008175
Lesenswert?
• ▲
▼
Hallo

Ich habe eine signed Int variable...

In dieser befindet sich nun ein negativer Wert...
Das kann ich durch eine IF abfrage prüfen...

Nun möchte ich diesen wert in eine Variable vom Typ int (also ohne 
vorzeichen) schreiben...

Dazu habe ich abs(variable) sowie labs(Variable) versucht... Beide 
funktionieren jedoch nicht!
1
int Diode = 185;
2
  int Sensor = 100;
3
  signed int Resultat2 = 0;
4
  int Resultat = 0;
5
  unsigned char ucVorzeichen = 0;  //0 = plus 1 = minus
6
  Resultat2 = Sensor - Diode;
7
  if(Resultat2 < 0)
8
  {
9
    ucVorzeichen = 1;
10
    Resultat = labs(Resultat2);
11
    status(1);
12
  }
13
  Resultat = ((Resultat * 488) / 100);

Merkwürdigerweise kommt nach der Umwandlung mit itoa eine Negative zahl 
heraus obwohl int ja nicht negativ sein kann!
1
uart_puts("Resultat: ");
2
    uart_puts( itoa(Resultat , String, 10)  );

Woran kann das liegen?
#2008193
Lesenswert?
• ▲
▼
Das liegt daran, dass int ein signed Typ ist (auch wenn du das nicht 
dazuschreibst)...

Wenn du unsigned willst, musst du das natürlich extra angeben.
Auf den AVRs kannst du z.B. die Typen uint8_t, uint16_t, ... verwenden.

Die Funktion labs() ist für long-Werte gedacht, abs() müsste die 
richtige sein.
Außerdem erwartet itoa eine signed Variable (und bekommt sie in deinem 
Beispiel auch). Für unsigned nimm utoa.

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.