C 和 Arduino 中的有趣部门

Funny Division in C and Arduino

长话短说;博士 为什么

   printf("%d\n", 042/10  );

return 3 而不是 4?

嘿,实际上我在使用 Arduino IDE 时确实有这个疑问,但为了验证我确实在另一个 C 编译器中尝试过。问题中的代码在这里:

Serial.println(42/10);

这很好用,显示 4。这是有趣的一点

Serial.println(042/10);

这个return3.

这似乎很基础,但我找不到合适的 post 来回答这个问题。提前致谢!

Serial.println(042/010); 将输出 4

起源于 C 语言的早期,当时八进制数至少比现在更常见 (?)。一旦定义,您将无法更改它。

前导零表示它是八进制的。 042 等于十进制的 34。 34/10 确实是 3 使用 int 数学。

printf("%d\n", 042/10 ); 中的 042 被解释为八进制值:

042(十进制)= 34(十进制)

所以你的除法实际上是:(int)34/10 = 3