Merkwürdiges Verhalten in C bei der Berechnung der Ziffernsumme mit führenden Nullen

Ich wollte nur ein minimalistisches Programm in C schreiben, um die Summe der Ziffern einer natürlichen Zahl zu berechnen (die Summe der Ziffern ist wie folgt definiert: sumOfDigits (123) = 6, sumOfDigits (0) = 0, sumOfDigits (32013) = 9 , und so weiter).

Bisher ist mit dem folgenden Code-Snippet alles in Ordnung. Beispielsweise liefert es für 5100 6 korrekt. Aber warum wird 14 für 05100 ausgeliefert (denken Sie an die führende 0)?

Was ist denn hier los?

Ich habe mir die binäre Darstellung der Zahlen angesehen, aber das hat mir keine Informationen gegeben. (Übrigens: Der folgende Code sollte überall laufen, denke ich.)

#include <stdio.h>

unsigned int sumOfDigits(unsigned int n) {
    int retval = 0;
    while (n > 0) {
        retval += n % 10;
        n/=10;
    }
    return retval;
}

int main() {
    printf("OK: %u\n", sumOfDigits(5100u));
    printf("WTF: %u",  sumOfDigits(05100u));
    return 0;
}

BEARBEITEN: Wie Zaibis sagte, bedeutet eine führende 0 eine Oktalnotation. :-) und so: 5100_8 == 2624_10

Antworten auf die Frage(1)

Ihre Antwort auf die Frage