为什么C17中的017 == 15?

时间:2013-10-21 02:54:45

标签: 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;
}

它会询问打印的内容。我编译并运行了这个例子,得到的差异是3,所以x是15.我有点看看为什么会这样,但如果有人真的为我澄清它,我真的很感激。

[1]我找了类似的问题,但没有找到任何彻底解释这个问题的问题。如果有人可以将我链接到一个也不错的那个。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果我们查看C99草案标准部分017 整数常量 八进制常量的语法,

6.4.4.1是常量octal >如下:

octal-constant:
  0
  octal-constant octal-digit
octal-digit: one of
   0 1 2 3 4 5 6 7

因此任何以0开头的整数常量都是八进制( base 8 ),这包括0本身。