int an double signatur übergeben
-
Hallo,
ich hätte nur eine ganz kurze frage: wenn ich eine funktion habe die double entgegennimmt ich aber diese mit einem int füttere....was steht dann in der funktionsparameter (unten x) drin? Sind dann nur die unteren 32 bit mit der integer zahl (unsigned int) belegt und die oberen 32 bit Null?
also beispiel:
void foo(double x) { // etwas mit x machen } ... // irgendwo in main z.B unsigned int a = 33215; foo(a); ...
-
Der int wird implizit nach double gecastet,
was in dem double steht hat also nichts mehr mit der binären Repräsentation des ints zu tun.
Da steht eben dann dein 33215 als double drin.
-
Nein, das wird (meistens) sinnvoll umgewandelt.
xist dann also33215.0.
Um deutlich zu machen, dass die Umwandlung so gewollt ist, sollte man sie explizit durchführen:unsigned int a = 33215; foo(static_cast<double>(a));Dann wissen Compiler und andere Leser sofort, was da passieren soll.
-
x ist dann also 33215.0
moment...also es kann sein dass dann auch einträge (1er) in den oberen 32 Bit von x auftreten?
P.S.: bitte keine kommentare mit "Probiers aus..."
-
Der int wird in einen double umgewandelt. Aus 1234 wird 1234.0. Nix mit irgendwelchen Bitpattern. End of Story.

-
jogast schrieb:
x ist dann also 33215.0
moment...also es kann sein dass dann auch einträge (1er) in den oberen 32 Bit von x auftreten?
Ja,
xhat nichts mehr mitazu tun und ist einfach eindouble. C++ rechnet an der Stelle automatisch um.
-
danke erstmal. vielleicht anders gefragt:
ist das bitmuster von 1234 und 1234.0 identisch? also angenommen man schneidet die ersten 32 bit vovn 1234.0 ab?
-
nein, hab ich doch gesagt.
-
jogast schrieb:
ist das bitmuster von 1234 und 1234.0 identisch?
Nein, ganz und gar nicht.
-
Hallo jogast,
schau dir mal das IEEE 754-Format (für float und double) an. Und Ganzzahlen (char/short/int/long/...) dagegen werden üblicherweise im 2er-Komplement gespeichert, d.h. komplett andere interne Repräsentation.