Warum ist das ein undefiniertes Verhalten?

Meine Antwort aufdiese Frage war diese Funktion:

inline bool divisible15(unsigned int x) 
{
    //286331153 = (2^32 - 1) / 15
    //4008636143 = (2^32) - 286331153
    return x * 4008636143 <= 286331153;
}

Auf meinem Rechner mit VS2008-Compiler hat es jedoch perfekt funktioniertHier es funktioniert überhaupt nicht.

Hat jemand eine Idee, warum ich auf verschiedenen Compilern unterschiedliche Ergebnisse erhalte?unsigned Überlauf ist kein undefiniertes Verhalten.

Wichtige Notiz: Nach einigen Tests wurde bestätigt, dass es schneller ist als der Rest der Division um 15. (Allerdings nicht bei allen Compilern)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage