C中与八进制数字有关的事实鲜为人知。让我们首先看下面的示例代码。
例子:
// program to show octal number interpretation
#include
int main()
{
int x = 012;
printf("%d", x);
return 0;
}
输出:
10
令人惊讶的是,输出不是12。这是因为在0之前的整数被解释为八进制数。十进制值12的八进制数是10。但是,如果x等于092,那么编译器将显示错误,因为92不是有效的八进制数。
八进制转义序列
在C中,八进制转义序列由\表示,后跟三个八进制数字。注意,也允许一个或两个八进制数字。八进制序列结束于\后面的三个八进制数字之后,或者\后面的数字不是八进制数字时结束。
例子:
// program to show octal escape sequence
#include
int main()
{
char str[] = "31\01267";
printf("%s", str);
return 0;
}
输出:
31
67
如果我们看一下输出,那么31后一个字符印刷,然后67被打印出来。这是因为\ 012被解释为\ n或换行字符。其实,\ 012表示八进制转义序列\ n或换行。十进制的12的八进制值为10,ASCII表示换行符。
// program to show octal escape sequence
#include
int main()
{
char str[] = "31\12367";
printf("%s", str);
printf("\n");
char str2[] = "11\77967";
printf("%s", str2);
return 0;
}
输出:
31S67
11?967
在str \ 123中,它被解释为八进制转义序列,八进制123的值为83,并且在我的计算机中与之对应的字符为’S’,因为我的计算机使用ASCII。如果使用的字符集不是ASCII,则可以不同。
在str2中,\ 77被解释为八进制转义序列,而不是\ 779。因此,77的值以十进制表示为63,以ASCII表示为“?”。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。