-1

字符在C语言中可以归类为整数吗?

我在词法分析器的上下文中说话。我正在使用 C 语言构建一个扫描器。

4

7 回答 7

1

你可以简单地做:

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

于 2013-09-18T11:12:00.103 回答
1

也许你想问 char 是否可以归类为numbers. 如果是这样,是的,它们可以,因为 char 变量将 char 的值存储为数字。

说:

char c = 120; //legal

您可以存储在 char 中的数字范围取决于编译器。最常见的是,char 变量存储范围从-128到的值127,总共 256 种可能性。

根据变量。数据类型。- C++ 文档

您还可以使用从0到的无符号字符255

请注意,如果您存储超出此范围的数字,您将失去精度。说:

char c = 300;
int i = c;
std::cout << i;   //prints 44
system("pause");
return 0;
于 2013-09-18T11:51:43.887 回答
1

在“ 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);
}
于 2013-09-18T12:38:30.377 回答
0

当然,字符可以隐式转换为整数。

char a = 'c';
int b = a;
于 2013-09-18T11:24:15.997 回答
0

使用类型转换:

char c = 'a';
int x = (int) c;
printf("%d\n", c);

或者

char c = 'a';
printf("%d\n", c);

两者都会给你97

于 2013-09-18T11:26:27.107 回答
0

char是一个整数类型int,类似于缩小范围。

您可以像使用 、 或 一样添加、乘法、移位、int打印、short扫描。 范围比其他范围小。许多代码涉及并默默地提升到,所以需要小心。longlong longcharcharshortint

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 位的奇异机器上,存在其他问题。

于 2013-09-18T13:10:46.187 回答
0

字符表示为整数。分析输入时的一个常见陷阱如下所示:

char c; // (!!) should be of type int to hold EOF

while((c = getchar()) != EOF) {
  // ...
}
于 2013-09-18T11:46:30.457 回答