为什么C中的017==15?
我已经读了一些关于endianness及其在C语言中的作用的书,但是没有什么能真正为我澄清这一点。我刚从C开始,我看到了这个例子:为什么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
#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
本身。它是一个八进制常量。这是一个八进制常数