字符在C语言中可以归类为整数吗?
我在词法分析器的上下文中说话。我正在使用 C 语言构建一个扫描器。
你可以简单地做:
const char str[] = "Hello world";
char c = 'H';
// And use any of these:
int chr = 'H'; // chr = 0x48
chr = c; // chr = 0x48
chr = str[0]; // chr = 0x48
而且你最终会得到0x48
(72) in chr
。
也许你想问 char 是否可以归类为numbers
. 如果是这样,是的,它们可以,因为 char 变量将 char 的值存储为数字。
说:
char c = 120; //legal
您可以存储在 char 中的数字范围取决于编译器。最常见的是,char 变量存储范围从-128
到的值127
,总共 256 种可能性。
您还可以使用从0
到的无符号字符255
。
请注意,如果您存储超出此范围的数字,您将失去精度。说:
char c = 300;
int i = c;
std::cout << i; //prints 44
system("pause");
return 0;
在“ The C Programming Language ”(第二版)中特别提到,就stdio.h的字符操作功能而言,char 和 int 类型之间没有区别。
char 类型专门用于存储(此类)字符数据,但可以使用任何整数类型
这是改编自本书的示例,并说明了这一点:
#include <stdio.h>
/* copy input to output */
int
main(void)
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
当然,字符可以隐式转换为整数。
char a = 'c';
int b = a;
使用类型转换:
char c = 'a';
int x = (int) c;
printf("%d\n", c);
或者
char c = 'a';
printf("%d\n", c);
两者都会给你97
char
是一个整数类型int
,类似于缩小范围。
您可以像使用 、 或 一样添加、乘法、移位、int
打印、short
扫描。 范围比其他范围小。许多代码涉及并默默地提升到,所以需要小心。long
long long
char
char
short
int
char c;
int i;
c = -2; // OK
i = -2; // OK
// sizeof(c) == 1
// sizeof(i) >= 2 (often 4, sometimes 8)
scanf("%hhd", &c);
scanf("%d", &i);
printf("%hhd", c);
printf("%d", i);
在 a byte
> 9 位的奇异机器上,存在其他问题。
字符表示为整数。分析输入时的一个常见陷阱如下所示:
char c; // (!!) should be of type int to hold EOF
while((c = getchar()) != EOF) {
// ...
}