Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么C中的017==15?_C_Int_Endianness - Fatal编程技术网

为什么C中的017==15?

为什么C中的017==15?,c,int,endianness,C,Int,Endianness,我已经读了一些关于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; } #包括 内部主(空){ int x=017; int y=12; in

我已经读了一些关于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;
}
#包括
内部主(空){
int x=017;
int y=12;
int-diff=x-y;
printf(“差异为%d\n”,差异);
返回0;
}
它询问将打印什么。我编译并运行了这个示例,得到了diff是3,所以x是15。我有点明白这是为什么,但如果有人真的为我澄清一下,我会非常感激


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

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

就像在它前面加上
0x
会告诉它使用十六进制(以16为基数)

例如:

int x = 05;  // 5 in octal
int y = 5;   // 5 in decimal
int z = 0x5; // 5 in hex

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

就像在它前面加上
0x
会告诉它使用十六进制(以16为基数)

例如:

int x = 05;  // 5 in octal
int y = 5;   // 5 in decimal
int z = 0x5; // 5 in hex
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
开头的任何整数常量都是八进制(以8为基数),这包括
0
本身。

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
开头的整数常量都是八进制的(基数8),这包括
0
本身。

它是一个八进制常量。这是一个八进制常数