为什么'var=010'在C中给出'var'值'8'?

为什么'var=010'在C中给出'var'值'8'?,c,C,我无法理解以下代码产生的输出: #include <stdio.h> int main() { int var = 010; printf("%d", var); } #包括 int main() { int-var=010; printf(“%d”,var); } 上述代码的输出是8前导0引入了一个八进制常数,因此010是八进制,十进制为8。如果您想要二进制,请写入0b010(十进制中为2)。前导0引入一个八进制常量,因此010是八进制,即十进制中的8。如果您

我无法理解以下代码产生的输出:

#include <stdio.h>

int main()
{
    int var = 010;
    printf("%d", var);
}
#包括
int main()
{
int-var=010;
printf(“%d”,var);
}

上述代码的输出是
8

前导
0
引入了一个八进制常数,因此
010
是八进制,十进制为8。如果您想要二进制,请写入
0b010
(十进制中为2)。

前导
0
引入一个八进制常量,因此
010
是八进制,即十进制中的8。如果您想要二进制,请写入
0b010
(十进制为2)。

010
是一个(即文字),编码为:

使用格式说明符
%d
调用时,它将打印以十进制编码的给定有符号整数的值,因此,您将看到写入输出的字符
8

010
是一个(即文字),编码为:


当您使用格式说明符调用时,
%d
,它将打印以十进制编码的给定有符号整数的值,因此,您将看到写入输出的字符
8

请阅读以了解为什么“向我解释此代码”问题不属于主题,还有你能做些什么使它成为主题。@JörgWMittag:这个问题实际上是关于实质性的代码序列,而问题在于代码中嵌入的算法。这不是关于C元素的简单解释的问题。此外,如果按照C 2018 6.4.4.1的规定对其进行了简洁的回答,那么说其过于宽泛是荒谬的。@Eric。但这一次正好是重复的regardless@MadPhysicist当前位置这很好,但与问题是否过于宽泛无关。我们不应该通过错误地告诉人们一个正确的(尽管是重复的)问题违反了一些规则或指导原则来阻止参与堆栈溢出。@EricPostPhischil:问题中没有任何迹象表明OP到底对什么感到困惑,以及他理解和不理解代码的哪些部分。代码片段使用了预处理器、函数、类型、语句、表达式、局部变量、声明、标准库、整数,可能还有很多我忘记的东西。如果没有一个明确的陈述,确切地说,OP的困惑是什么,你必须解释所有这些。请阅读以理解为什么“向我解释此代码”的问题是离题的,还有你能做些什么使它成为主题。@JörgWMittag:这个问题实际上是关于实质性的代码序列,而问题在于代码中嵌入的算法。这不是关于C元素的简单解释的问题。此外,如果按照C 2018 6.4.4.1的规定对其进行了简洁的回答,那么说其过于宽泛是荒谬的。@Eric。但这一次正好是重复的regardless@MadPhysicist当前位置这很好,但与问题是否过于宽泛无关。我们不应该通过错误地告诉人们一个正确的(尽管是重复的)问题违反了一些规则或指导原则来阻止参与堆栈溢出。@EricPostPhischil:问题中没有任何迹象表明OP到底对什么感到困惑,以及他理解和不理解代码的哪些部分。代码片段使用了预处理器、函数、类型、语句、表达式、局部变量、声明、标准库、整数,可能还有很多我忘记的东西。如果没有一个明确的声明,你就必须解释清楚OP到底对什么感到困惑。哪个C编译器支持
0b
0b
要么是C++14,要么是C的GNU扩展。gcc中的MadPhysicast从3.4开始,clang从9开始,msvc从2015开始,C++14标准,C complier支持的许多嵌入式编译器
0b
0b
要么是C++14,要么是C的GNU扩展。gcc中自3.4开始的@MadPhysicast,自9开始的clang,自2015年开始的msvc,C++14标准,许多嵌入式编译器
001 == 1
002 == 2
...
007 == 7
010 == 8