Typenumwandlung



  • Hallo,
    in meinem Buch steht folgendes:

    short size(512); double erg, x=1.5;
    erg=size/10*x;
    

    Dann steht zuerst wird 512/10 berechnet. Das würde 50 ergeben, und in Double konvertiert werden, bevor es mit x multipliziert wird. Aber wieso 50 kommt da nicht 51 raus?



  • Nein, es würde als erstes zu einem int gecastet werden, weil weder 512, noch 10 vom Typ double sind.

    Um dies zu überprüfen, kannst du folgendes machen:

    std::cout.setf(std::ios_base::boolalpha); // Ausgabe von bool-Werten: true/false, anstatt 1/0
    std::cout << "short size/10 == double: " << (typeid(size/10) == typeid(double)) << std::endl;
    std::cout << "short size/10 == int: " << (typeid(size/10) == typeid(int)) << std::endl;
    

    Ausgabe:
    `short size/10 == double: false

    short size/10 == int: true`

    Um einen Cast nach double zu erreichen, könntest du zum einen size als double deklarieren oder aber die Genauigkeit der 10 verändern, damit wenigstens eine der beiden Zahlen vom Typ double sind: 10.0

    Überprüfen:

    std::cout.setf(std::ios_base::boolalpha);
    std::cout << "short size/10.0 == double: " << (typeid(size/10.0) == typeid(double)) << std::endl;
    // oder..
    double size = 512.0; // .0 ist optional, meiner Meinung nach ist es aber dadurch besser sichtbar, dass es sich um eine Variable des Typs double handelt
    std::cout.setf(std::ios_base::boolalpha);
    std::cout << "double size/10 == double: " << typeid(size/10) == typeid(double)) << std::endl;
    

    Ausgabe:
    `

    short size/10.0 == double: true

    double size/10 == double: true

    `

    Warum da nun - vom fehlenden Cast nach double mal abgesehen - 50 anstatt von 51 rauskommen soll, verstehe ich aber nicht, denn bei mir ist 512/10 = 51(.2 <- "abgeschnitten", weil nach int gecastet), dh. es sollte am Ende 76.5 herauskommen (51 * 1.5 = (dank diesmal vorhandenem double korrekt gecastet) 76.5) bzw. bei komplett richtiger Rechnung: 51.2 * 1.5 = 76.8)



  • genau so hätte ich das auch gesehen. Da ist dem Buch(C++ lernen und professionell anwenden) wohl ein Fehler drinnen.


Anmelden zum Antworten