1

我已经阅读了一些关于字节顺序及其在 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;
}

它询问将打印什么。我编译并运行了这个例子,得到了 diff 是 3,所以 x 是 15。我有点明白为什么会这样,但如果有人真的为我澄清它,我将不胜感激。

[1] 我已经寻找了类似的问题,但没有找到任何可以彻底解释该问题的问题。如果有人可以将我链接到一个也很好。

4

2 回答 2

8

给数字加上前缀0将告诉编译器将其标记为八进制数字(以 8 为基数)

就像前缀它0x会告诉它使用十六进制(base 16)

例如:

int x = 05;  // 5 in octal
int y = 5;   // 5 in decimal
int z = 0x5; // 5 in hex
于 2013-10-21T02:56:33.723 回答
1

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

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

0所以任何以八进制(base 8 )开头的整数常量,包括0它自己。

于 2013-10-21T02:59:50.350 回答