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 zero

    und 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.


  • Mod

    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 zero

    Wahrscheinlich 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


Log in to reply