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
长话短说;博士 为什么
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