C和Arduino中的滑稽分区

问题描述

TL; DR 为什么

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

返回3而不是4?

嘿,所以实际上我在Arduino IDE时确实有这个疑问,但是只是为了验证我是否确实在另一个C编译器中进行了尝试。问题中的代码在这里

Serial.println(42/10);

这很好,显示4。这很有趣

Serial.println(042/10);

此返回3。

这似乎很基础,但是我找不到合适的帖子来回答这个问题。预先感谢!

解决方法

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

,

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

042(十月)= 34(十月)

所以您的部门实际上是:(int)34/10 = 3

,

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

C语言最早出现的词干,八进制数至少比现在更常见(?)。一旦定义,就永远无法更改。