Gast
#1580114
Hallo, will int Variable einer floatvariable zuweisen. float f; unsigned int i; f = i; oder: f = i/27906; kann mir jemand helfen? mit diesem cast operator habe ich es versucht - geht nicht.
|
Anzeige
|
int float zuweisung
Gast
#1580114
Hallo, will int Variable einer floatvariable zuweisen. float f; unsigned int i; f = i; oder: f = i/27906; kann mir jemand helfen? mit diesem cast operator habe ich es versucht - geht nicht. dan schrieb: > mit diesem cast operator habe ich es versucht - geht nicht. Was bedeutet "geht nicht" > f = i/27906; lass mich raten, in f steht trotzdem immer noch eine ganze Zahl. Wenn i zb den Wert 500 hätte, steht in f eine 0. Das kommt daher, dass i ein int ist, 27906 ein int ist (eigentlich ein long, aber das ist jetzt nicht wichtig) und daher die Division als Ganzzahldivision ausgeführt wird. Erst dieses Ergebnis wird dann auf einen float umgewandelt und zugewiesen. Merke: Wenn der Compiler entscheiden muss, wie eine Operation konkret duchrzuführen ist, entscheiden immer nur die Datentypen der beteiligten Operanden. Der Datentyp der Variablen, die das Ergebnis aufnehmen wird, ist dafür unerheblich.
Gast
#1580158
ok, danke schonmal. Ich verstehe nur noch nicht ganz wie ich jetzt an mein komma - ergebnis herankomme. f = FFFF/27906 wären 2,3484.... brauch diese kommazahl
Gast
#1580161
dan schrieb: > ok, > danke schonmal. > Ich verstehe nur noch nicht ganz wie ich jetzt an mein komma - ergebnis > herankomme. > > > f = FFFF/27906 wären 2,3484.... > > brauch diese kommazahl Dann sag ihm, dass er mit Komma rechnen soll:
dan schrieb: > Ich verstehe nur noch nicht ganz wie ich jetzt an mein komma - ergebnis > herankomme. Dann solltest du noch einmal darüber nachdenken, was die Aussage: "Ausschliesslich die beteiligten Operanden bestimmen, wie eine Operation implementiert wird" konkret für dich impliziert. 5 / 8 wird als Integer-Division durchgeführt, weil sowohl 5 als auch 8 ein Integer sind. 5.0 / 8 hingegen wird als Gleitkommaoperation durchgeführt, weil mindestens einer der beiden Operanden eine Floating Point Zahl ist (und die andere bei Bedarf dann ebenfalls auf Floating Point angehoben wird) > f = FFFF/27906 wären 2,3484.... Nein FFFF ist keine Zahl :-) Aber auch bei 0xFFFF / 27906 wäre das Ergebnis nicht 2.3484 sondern 2. Warum? Weil sowohl 0xFFFF als auch 27906 ein Integer sind. Wenn du also dafür sorgen willst, dass die Berechnung als Gleitkommadivision gemacht wird, musst du dafür sorgen, dass mindestens einer der beiden Operanden ein Gleitkommawert ist. Bei einem konstanten Wert geht das ganz einfach 5 ist ein Integer 5. ist eine Gleitkommazahl 5.0 ist eine Gleitkommazahl Das Vorhandensein eines Dezimalpunkes genügt bereits um eine Zahl als Gleitkomazahl zu kennzeichnen. Hat man eine Variable, dann muss man sie entsprechend umcasten.
Gast
#1580173
beim gcc funktioniert f = (float)i/27906; wunderbar ... damit sagst du dem Compiler, dass er die division als floatingpoint division durchführen soll, da i zuvor in einen float gecastet wird. gruss Claudio
Gast
#1580179
Vielen Dank. Hat mit (float)0xFFFF gelkappt. Danke euch!
Gast
#1580237
... müsste nicht auch f = i/27906.0; klappen?
Gast
#1580266
Ja. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|