abs(test1 - test2); Compiler Warning pointless comparison of unsigned integer with zero
-
Hallo, Kann mir jemand erklären, warum das hier:
uint16_t test1 = 100; uint16_t test2 = 90; int erg; test = abs(test1 - test2);
diese Warnung wirft:
Warning[Pe186]: pointless comparison of unsigned integer with zeround das hier
uint16_t test1 = 100; uint16_t test2 = 90; int erg; test = test1 - test2; test = abs(test);
keine Warnung wirft?
Fehler im Compiler/Parser oder steh ich grad völlig auf dem Schlauch?
zur Info:
In der entgültigen Anwendung weiß ich nicht wie groß test1 und 2 sind. Ich möchte nur überprüfen, dass die beiden Werte nah beieinander liegen.Danke Daniel
-
Von welchem Typ ist die Variable 'test'??
Die Zeile
test = abs(test1 - test2);
ist sinnlos, da test1 - test2 onehin immer positiv ist, da unsigned - unsigned wieder unsigned, also immer >= 0 ist.
-
Na, was ist wohl 90U - 100U? Tipp: Die Antwort ist nicht -10.
-
Daniel_irgendwas schrieb:
Hallo, Kann mir jemand erklären, warum das hier:
uint16_t test1 = 100; uint16_t test2 = 90; int erg; test = abs(test1 - test2);
diese Warnung wirft:
Warning[Pe186]: pointless comparison of unsigned integer with zeroWahrscheinlich weil
test1 - test2
unsigned ist und daher nie negativ werden kann. Kann andersrum sein, dass du bei der Subtraktion einen Überlauf bekommst, falls test1 kleiner als test2 ist...und das hier
uint16_t test1 = 100; uint16_t test2 = 90; int erg; test = test1 - test2; test = abs(test);
keine Warnung wirft?
test ist signed? Schwer zu sagen, die Deklaration hast du nicht gepostet.
Man könnte sowas machen:
bool isnearby(unsigned a, unsigned b, unsigned tolerance) { return a >= b && a - b <= tolerance || b > a && b - a <= tolerance; }
-
Blöd! Danke für die schnelle Antwort