Modulo auf eine unsigned int Variable angewendet



  • Hallo zusammen,

    folgendes Verhalten kann ich mir absolut nicht erklären.
    Wer kann mir weiterhelfen?

    [code="c"]

    unsigned int var = 0;
    printf("%d", (var-1)%5);

    das Ergebnis ist 0. Meines erachtens müsste es jedoch -1 sein.
    Wo ist mein Denkfehler?
    Mit dem Datentyp unsigned char und auch mit char, int, long kommt -1 heraus.
    Mit unsigned int, unsigned long kommt jedoch 0 als Ergebnis heraus.

    Vielen Dank für Eure Hilfe



  • -1 als unsigned ist 4.294.967.295
    und xx5 % 5 ist nunmal 0



  • Einleuchtend 🙂

    Dann versteh ich jedoch noch nicht ganz, warum bei unsigned char ne -1 rauskommt.
    -1 entspricht bei unsigned char 255, was ebenfalls durch 5 teilbar ist.



  • (unsigned) char und (unsigned) short werden vor jeder Rechnung erstmal in (unsigned) int umgewandelt. Nennt sich "integral promotion".



  • Die Berechnungen erfolgen in int , wenn int den Werteberecih der beteiligten Variablen abdeckt.

    int kann den Wertebereich von signed char und unsigned char aufnehmen. Und bei int gibt es die -1

    int kann nicht den Wertebereich von unsigned int aufnehmen. Darum erfolgt die Berechnung als unsigned int . Und da gibt es keine -1



  • @SG1:
    ich vermute dann aber, dass unsigned char und unsigned short, in meinem Fall, vor der Berechnung in int und nicht in unsigned int gewandelt werden. Denn sonst würde ja wieder 0 als Ergebnis rauskommen.

    @DirkB:
    Das ist neu für mich 👍

    Vielen Dank. Ihr habt mir sehr weitergeholfen.


Anmelden zum Antworten