为什么C17中的017 == 15?

ree*_*eem 1 c int endianness

我已经对字节序及其在C语言中的作用进行了一些阅读,但没有什么能真正为我澄清这一点.我刚开始使用C,我看到了这个例子:

#include <stdio.h>

int main(void) {
    int x = 017;
    int y = 12;
    int diff = x - y;
    printf("diff is %d\n", diff);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它询问会打印什么.我编译和运行的例子,得到了差异为3,那么x是15.我有点看这是为什么,但真的很感激,如果有人真的澄清对我来说.

[1]我已经找到了类似的问题,但没有找到任何彻底解释这个问题的问题.如果有人可以将我与一个也很好的人联系起来.

yam*_*tes 8

使用前缀加号0将告诉编译器将其标记为八进制数(基数为8)

就像前缀一样0x会告诉它使用hex(base 16)

例如:

int x = 05;  // 5 in octal
int y = 5;   // 5 in decimal
int z = 0x5; // 5 in hex
Run Code Online (Sandbox Code Playgroud)