implizite Typumwandlung bei Division eines unsigned und eines signed ints?!
-
Hallo zusammen!
Ich habe folgende Operation gegeben:
i1 = u2 / s1,
wobei i1 ein integer, u2 ein unsigned int und s1 ein signed int sind. Zu welcher Art von Typumwandlung wird es bei der Ausführung des Programms kommen? Ich glaube, das ist eine ziemlich blöde Frage eigentlich, ich konnte die Antwort aber bei meinen bisherigen Internetrecherchen nicht finden...
-
trottelchen schrieb:
ich konnte die Antwort aber bei meinen bisherigen Internetrecherchen nicht finden...
Dann suchst Du vielleicht nach den falschen Begriffen. Probier mal
"integral promotion" und
"arithmetic conversions" in Verbindung mit jeweils
"C++"lg,
k
-
Auf jeden Fall würde dabei nichts Sinnvolles rauskommen. Die Typumwandlung musst du selber explizit machen:
i1 = (int)u2 / s1
Ansonnsten würde Müll rauskommen, wenn u2 negativ ist.
-
Da
http://msdn.microsoft.com/en-us/library/aetzh118.aspx
und speziell diese beiden Punkte
http://msdn.microsoft.com/en-us/library/fc9te331.aspx
http://msdn.microsoft.com/en-us/library/09ka8bxx.aspxKurzfassung: "unsigned" hat Vorrang.
-
Ok, mir ist schon klar, dass vor der Ausführung einer Operation immer der Typ des Operanden angepasst wird, der "kleinere" Typ also auf dem "größeren" erweitert wird. Allerdings unterscheiden sich doch unsigned int und signed int nicht in der Größe, sondern nur im Wertebereich. Genauso ists bei float und int. In diesem Fall wird der Wert der int-Variablen in einen float-Datentyp umgewandelt, richtig?
Ich kann mich also merken, dass sozusagen:
unsigned int > signed int
und
float > int, oder?
Wobei sich das ">" nicht auf die Bit-Größe bezieht, sondern darauf, welcher Datentyp "Vorrang" hat.
-
ich hab mir den code nicht selber ausgedacht!
-
Achso, und "signed int" und "int" ist doch das gleiche, oder nicht?
-
trottelchen schrieb:
Achso, und "signed int" und "int" ist doch das gleiche, oder nicht?
Jup
Siehe auch: http://www.cppreference.com/wiki/language/types