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

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