# implizite typumwandlung int - uint



## maniacquaker (27. Dezember 2006)

Hallo,
ich würde gerne wissen, warum folgende bedingung false zurück liefert:

int i=-2;
unsigned int limit=2;

if(i<=limit)
...


----------



## Matthias Reitinger (28. Dezember 2006)

Hallo,

hier wird vor dem Vergleich implizit der Wert von i in den Typ unsigned int umgewandelt. Dabei ergibt sich ein Wert von 4.294.967.294, was eindeutig nicht kleiner oder gleich 2 ist. Damit der Vergleich funktioniert, muss man limit explizit in den Typ int casten. Das geht allerdings auch nur solange gut, bis limit mal den Wertebereich von int verlässt – dann klappt es wieder nicht.

Gibt es eigentlich einen zwingenden Grund, warum du unsigned int für die Variable limit verwendest? Deklarier sie doch einfach als int, dann musst du dir deswegen keine Sorgen mehr machen.

Grüße,
Matthias


----------



## Online-Skater (28. Dezember 2006)

Darf ich an dieser Stelle mal fragen wofür "unsigned" im allgemeinen sinnvoll erscheint ? Nur allein wegen dem doppelten Wertebereich ?


----------



## Flegmon (28. Dezember 2006)

Es gibt Situationen in denen du nie in den negativen Bereich kommen wirst (zB. wenn du die Anzahl von irgendetwas speicherst/ Versionsnummern / ...) und warum sollte man dann den Speicher verschwenden und int nutzen, wenn man doch auch unsigned int nutzen kann.


----------



## maniacquaker (30. Dezember 2006)

ich muss keinen unsigned int nehmen. Die frage ist in einem übungsbuch, mit dem ich meine kenntnisse noch vertiefen möchte.

dann muss ich mir die regel für den impliziten typecast nochmal angucken.
dachte der uint wird in int umgewandelt und nicht umgekehrt (int wird ja auch in double gecastet wenn ein double vorkommt)


----------

