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