Dziwne zachowanie w C przy obliczaniu sumy cyfr z wiodącymi zerami

Chciałem napisać minimalistyczny program w C, aby obliczyć sumę cyfr pewnej liczby naturalnej (suma cyfr jest zdefiniowana następująco: sumOfDigits (123) = 6, sumOfDigits (0) = 0, sumOfDigits (32013) = 9 , i tak dalej).

Do tej pory wszystko jest w porządku z następującym fragmentem kodu. Na przykład dla 5100 daje 6, poprawnie. Ale dlaczego dostarczono 14 za 05100 (pamiętaj o wiodącym 0)?

Co tu się dzieje?

Spojrzałem na binarną reprezentację liczb, ale to nie dało mi żadnych informacji. (BTW: Myślę, że poniższy kod powinien działać w dowolnym miejscu).

#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;
}

EDYTOWAĆ: Jak stwierdził Zaibis .... wiodące 0 oznacza notację ósemkową. :-) i tak: 5100_8 == 2624_10

questionAnswers(1)

yourAnswerToTheQuestion