Comportamento estranho em C ao calcular a soma dos dígitos com zeros à esquerda

Eu só queria escrever um programa minimalista em C para calcular a soma dos dígitos de algum número natural (a soma dos dígitos é definida da seguinte forma: sumOfDigits (123) = 6, sumOfDigits (0) = 0, sumOfDigits (32013) = 9 , e assim por diante).

Até agora, está tudo bem com o seguinte trecho de código. Por exemplo, para 5100, ele fornece 6 corretamente. Mas, por que 14 é entregue por 05100 (lembre-se do 0 principal)?

Oque esta acontecendo aqui?

Eu dei uma olhada na representação binária dos números, mas isso não deu nenhuma informação para mim. (BTW: O código a seguir deve ser executado em qualquer lugar, eu acho).

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

EDITAR: Como Zaibis afirmou ... um 0 à esquerda significa notação octal. :-) e assim: 5100_8 == 2624_10

questionAnswers(1)

yourAnswerToTheQuestion