unsigned mit negativer zahl



  • hi, beschäftige mich gerade mit overflow / underflow bei Variablen.
    folgende Codezeile:

    unsigned int i = -1;

    ist ok.

    möchte ich aber als Fehler / Warnung vom Compiler.



  • offensiv schrieb:

    hi, beschäftige mich gerade mit overflow / underflow bei Variablen.
    folgende Codezeile:

    unsigned int i = -1;

    ist ok.

    möchte ich aber als Fehler / Warnung vom Compiler.

    Das gibt allerhöchstens ne Warnung, und das ist dann Compiler-Spezifisch.


  • Mod

    -Wsign-conversion mit g++ oder clang++
    -Werror macht aus der Warnung einen Fehler



  • Wozu diese Frage? 😕 Man hat 2 Möglichkeiten:
    1. nur positive Zahlen möglich, dann unsigned
    2. auch negative Zahlen möglich, dann int
    Was bitte sollen die Compilerbauer noch alles berücksichtigen, etwa dass auch double in Frage kommen soll?

    unsigned i1, i2, i3, i4;
    i1 = 1;
    i2 = 5;
    i3 = 2;
    i4 = i1 - i2 / i3;  // -1.5
    

    Der Programmierer soll und muss unsinnige Dinge des Anwenders abfangen. Ein Compiler muss aber nicht alles unsinnige des Proggers erkennen! 😃



  • Sone schrieb:

    Das gibt allerhöchstens ne Warnung, und das ist dann Compiler-Spezifisch.

    Sicher? Ich dachte unsigned Über- und Unterläufe sind definiert.



  • out schrieb:

    Sone schrieb:

    Das gibt allerhöchstens ne Warnung, und das ist dann Compiler-Spezifisch.

    Sicher? Ich dachte unsigned Über- und Unterläufe sind definiert.

    Ja, sind sie. Warnen darf der Compiler, soviel er lustig ist.



  • SG1 schrieb:

    out schrieb:

    Sone schrieb:

    Das gibt allerhöchstens ne Warnung, und das ist dann Compiler-Spezifisch.

    Sicher? Ich dachte unsigned Über- und Unterläufe sind definiert.

    Ja, sind sie. Warnen darf der Compiler, soviel er lustig ist.

    Er warnt aber nicht, weil es zu einem Über- oder Unterlauf kommt, sondern weil es schlicht und einfach zu einem Informationsverlust kommt.



  • out schrieb:

    SG1 schrieb:

    out schrieb:

    Sone schrieb:

    Das gibt allerhöchstens ne Warnung, und das ist dann Compiler-Spezifisch.

    Sicher? Ich dachte unsigned Über- und Unterläufe sind definiert.

    Ja, sind sie. Warnen darf der Compiler, soviel er lustig ist.

    Er warnt aber nicht, weil es zu einem Über- oder Unterlauf kommt, sondern weil es schlicht und einfach zu einem Informationsverlust kommt.

    Na und? Wieso und ob er warnt ist - wie gesagt - völlig seine Sache.



  • Bei solchen Zuweisungen wird das letzte Bit gesetzt, heißt wenn man weiß, dass der User keine größere Zahl als 32***(Hab die genaue Zahl vergessen) eingibt, kann man einfach auf das letzte Bit testen.


Anmelden zum Antworten