mit welchem Typ werden berechnungen ausgeführt??
-
Hi,
ich hab ne wirklich peinliche Frage. Aber gut lieber fragen und blöd da stehen als nicht fragen und blöd bleiben...
double db=5.5;
int in=5;in + db
wird hierbei die Berechnung mit double + double, int + int oder double + int ausgeführt? Sprich welchen typ hat das ergebnis?
-
es wird impliziet double + double gerechnet. allerdings bei einer zuweisung wie zb. in2 = in + db fehlt dir der nachkommaanteil bei in2 dann wieder..
gruß, dd
-
Vielen dank, das ist gut zu wissen, aber leider hast du es nicht genauer begründet womit ich dann gleich auf die anschlussfrage kommen muss
Was wäre dann
db + inund wie lauten die Regeln die das festlegen?
-
das wär 10.5, allerdings kommt es drauf an, worin du das speicherst, wenn du es in ein double speicherst wird auch 10.5 gespeichert, bei einem integer kommt 10 rein und du bekommst ne schöne warnung vom Herrn Compiler ^^
-
sobald n double vorkommt wird das ergebnis auch double. wenn du das ergebnis dann nem int zuweist, wird der wieder konvertiert.
-
Vielen dank für die hilfen. Entzwischen habe ich das gefunden was ich meinte, hab mich wohl etwas ungeschickt ausgedrückt;)
Es werden beide Operanden in den "höherwertigen" Typ konvertiert wobei:
char,short < int < long < long long < float < double < long double
sowie unsigned mit priorisierung über singed
-
soweit ich weiß, kann man aber auch angeben, was für einen Typ deine zuvor definierten Werte nun annehmen sollen.
z.B. kann eine Modulo-Operation % nicht mit double Operatoren ausgeführt werden.
double db0, db1; db0 = 12.1245; db1 = 10.999999; int erg = (int) db0 % (int) db1;
-
es wird immer in den tuep konvertiert in den du es speicherst d.h:
int x = y + z;
x plus y wird immer in nen int umgewandeltdouble x = y + z
y plus z wird immer in nen double umgewandelt
-
int a = 0.4 + 0.4 + 0.4;
a == 1 == (int)(0.4 + 0.4 + 0.4) == (int)(1.2)template hat die type promotion schon dargestellt. so wird auch erstmal gerechnet. erst bei der zuweisung wird in den typ der variablen auf der linken seite konvertiert.
-
--linuxuser-- schrieb:
es wird immer in den tuep konvertiert in den du es speicherst d.h:
int x = y + z;
x plus y wird immer in nen int umgewandeltdouble x = y + z
y plus z wird immer in nen double umgewandeltso ein schmarrn
-
hier der beweis
[code]
#include <iostream.h>
#include <conio.h>int main()
{
int i = 1;
double d = i / 2;
cout << d;
getch();
return 0;
}
[code]na was kommt raus? 0 :p
-
doppeld schrieb:
--linuxuser-- schrieb:
es wird immer in den tuep konvertiert in den du es speicherst d.h:
int x = y + z;
x plus y wird immer in nen int umgewandeltdouble x = y + z
y plus z wird immer in nen double umgewandeltso ein schmarrn
Hallo!
Es wird generell IMMER in den grösseren typ umgewandelt...
-
lest "the c programming language, second edition" von kernighan und ritchie. da drin ist es alles wunderbar erklaert.
fuer einen binaeroperator werden beide typen in den naechsthoeheren konvertiert und dann die operation ausgefuehrt. bei einer zuweisung dann muss die rechte seite in die linke seite konvertiert werden.
-
c.rackwitz schrieb:
lest "the c programming language, second edition" von kernighan und ritchie. da drin ist es alles wunderbar erklaert.
fuer einen binaeroperator werden beide typen in den naechsthoeheren konvertiert und dann die operation ausgefuehrt. bei einer zuweisung dann muss die rechte seite in die linke seite konvertiert werden.
Das ist Korrekt!...
-
naja, "naechsthoeherer" sollte heissen, "groesserer von beiden"
auch gibts unterschiede zwischen signedness und unsignedness und die sind auch irgendwie in der type promotion eingeflochten.