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
, wennint
den Werteberecih der beteiligten Variablen abdeckt.int
kann den Wertebereich vonsigned char
undunsigned char
aufnehmen. Und beiint
gibt es die -1int
kann nicht den Wertebereich vonunsigned int
aufnehmen. Darum erfolgt die Berechnung alsunsigned 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 michVielen Dank. Ihr habt mir sehr weitergeholfen.