我正在尝试执行以下程序。
#include "stdio.h"
#include "string.h"
void main()
{
char c='\08';
printf("%d",c);
}
我得到的输出是
56
。但对于除8
之外的任何数字,输出都是该数字本身,但对于8
,答案是56
。有人能解释一下吗?\
开头的字符表示八进制数是有点错误的,应该是 \0
,你忘了加 0
。 - Grijesh Chauhan'\08'
中,\0
被认为是一个字符,8
则是另一个字符。这被称为多字节字符(而不是多字符常量)。根据6.4.4.4第2条规定,它以一种实现定义的方式映射到执行字符集的一个成员。 - Eric Postpischil'\08'
被视为多字符常量,由\0
(计算值为0)和ASCII字符8
(计算值为56)组成。它的解释是实现定义的。C99标准如下所述:'\08'
分配给比char
更大的东西,比如int
或long
,它甚至还有效。但是,由于您将其分配给了char
,因此您正在“截断”某些部分。哪一部分可能也取决于实现/机器。在您的情况下,它会为您提供8
的值(ASCII字符,计算值为56)。\0
在C/C++中用于表示八进制数。八进制基数的数字范围是0->7
,所以\08
是一个多字符常量,由\0
组成,编译器将\08
解释为\0
+8
,因此它变成了'8'
,其ascii值为56
。这就是为什么你会得到56
作为输出结果。
'\08'
应该是未定义的,由实现定义。 - Grijesh Chauhan正如其他答案所说,这些数字表示八进制字符(基数为8)。这意味着您必须写'\010'
代表数字8,'\011'
代表数字9等。
还有其他编写赋值的方法:
char c = 8;
char c = '\x8'; // hexadecimal (base 16) numbers
0
表示八进制表示法--而不是二进制。 - Justin ᚅᚔᚈᚄᚒᚔ
{}
**格式化按钮),并添加有意义的标题。(编辑按钮就在问题下方)。 - BoBTFishc
的定义是一个多字符常量... - DarkDust