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