Frage

Ich versuche zu verstehen, wenn das Casting Daten verliert und wie sie funktioniert. Für die folgenden Beispiele versuche ich zu verstehen, ob es Datenverlust gibt und ob ja warum: (i - int(4),f - float(4),d-double(8))

i == (int)(float) i; // sizeof(int)==sizeof(float) <- no loss
i == (int)(double) i; // sizeof(int)!=sizeof(double) <- possible loss
f == (float)(double) f;// sizeof(double)!=sizeof(float) <- possible loss
d == (float) d;// sizeof(double)!=sizeof(float) <- possible loss

Reicht es aus, die Antwort nur auf Typgrößen zu stützen? (+ Rund)

War es hilfreich?

Lösung

Angenommen, 32-Bit-INTs und normale 4- und 8-Byte-IEEE-754-Schwimmer/Doppel, wäre es:

i == (int)(float) i;     // possible loss (32 -> 23 -> 32 bits)
i == (int)(double) i;    // no loss (32 -> 52 -> 32 bits)
f == (float)(double) f;  // no loss (23 -> 52 -> 23 bits)
d == (float) d;          // possible loss (52 -> 23 -> 52 bits)

Beachten Sie, dass int 32 Bit Präzision, Float 23 Bit, Double 52.

Andere Tipps

Der Speicher, der zur Speicherung von Variablen eines Typs zugewiesen wird, ist nicht die einzige Tatsache, dass Sie den Datenverlust berücksichtigen. Im Allgemeinen wären ein Weg zu Roundoff und wie CPU numerische Daten im Falle eines Überlaufs verarbeitet, andere Aspekte, die Sie sich möglicherweise befassen möchten.

Weil die sizeof Die gleiche Größe im Speicher bedeutet nicht, dass Datenverlust vorhanden sind.

Betrachten Sie 0,5.

Kann das in einem Schwimmer speichern, kann es aber nicht in einer Ganzzahl speichern.

Daher Datenverlust.

Ich möchte 0,5 dieses Kuchens. Kann das nicht als Ganzzahl darstellen. Entweder bekomme nichts oder viele Kuchen. Yum

Warum Ganzzahl? Weil Sie möglicherweise nur Ganzzahlzahlen benötigen, z. B. ein ID_num

Warum schweben? Weil Sie möglicherweise an realer Zahlenbeispiel arbeiten müssen % calculations

Warum verdoppeln? Wenn Sie reelle Zahlen haben, die nicht in die Schwimmergröße passen können

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top