uint64_t integer overflow in expression

  • Hallo,

    ich versuche den ESP in den Tiefschlaf zu schicken. Nachdem mir das bis zu 35 Minuten problemlos gelungen ist, kommt es darüber unter Umständen zu Problemen. Allerdings scheinen die Probleme nicht am ESP zu liegen, sondern am Compiler. Mit dem gcc unter Linux verhält es sich genauso. Vielleicht kann mir das hier jemand mal erklären. Dazu folgendes Programm:


    mytest.c


    Frage: was ist der Grund, dass es bei der Auswertung des Ausdrucks 45 * 60 * 1000000 zu einem overflow kommt? Wenn ich das Ergebnis 2700000000 aber direkt der Variablen zuweise, gibt es keine Probleme und der Tiefschlaf funktioniert. Die einzelnen Faktoren der Rechnung sind doch alle kleiner als das Endprodukt?


    Gruß

    JoAtHome

  • Mit type casting geht es:

    Code
    uint64_t microseconds = (uint64_t) 45 * 60 * 1000000;

    Damit wird auch in der Zwischenrechnung schon der passende Type verwendet.