计算带有前导零的数字总和时C中的奇怪行为

我只想在C中编写一个简约程序来计算某个自然数的位数之和(数字之和定义如下:sumOfDigits(123)= 6,sumOfDigits(0)= 0,sumOfDigits(32013)= 9 , 等等)。

到目前为止,使用以下代码片段一切正常。 例如,对于5100,它正确地提供6。 但是,为什么14为05100交付(记得领先的0)?

这里发生了什么?

我查看了数字的二进制表示,但这并没有给我任何信息。 (顺便说一下:我想,下面的代码应该在任何地方运行。)

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

编辑:正如Zaibis所说……领先的0表示八进制表示法。 :-)所以:5100_8 == 2624_10

前导0表示您想使用八进制数字系统。

所以017也就是十进制:15

而你的05100将是十进制的:2624