字符类型

char 类型基础与双重性

char 类型是所有数据类型中占用内存空间最少的,通常只占 1 个字节(8位)。它既可以存储字符,也可以存储小整数,具有双重性。

1. 取值范围与底层存储

1 个字节(8位二进制)的范围是 0000 0000 到 1111 1111。char 是否有符号取决于编译器实现:

  • 无符号 unsigned char:8位全为数据位,范围 0 ~ 255(0000 0000 ~ 1111 1111)。
  • 带符号 signed char:最高位为符号位,范围 -128 ~ 127(1000 0000 为 -128,0000 0000 为 0,0111 1111 为 127,1111 1111 为 -1)。

2. 字符表示与 ASCII 码

字符用单引号括起来(如 'A'、'9'、'!')。底层存储依赖 ASCII 码映射:

  • 'A' 对应整数 65
  • '9' 对应整数 57(注意:字符 '9' 不等于数字 9,数字 9 的 ASCII 是控制字符,字符 '9' 是符号)
  • '!' 对应整数 33
  • 特殊字符使用转义序列:'\n'(换行)、'\t'(制表符)、'\''(单引号)

3. 双重性:字符与整数的互转

char 本质是存整数,输出格式决定了解析方式:

  • printf("%d", letter):按整数输出(打印 ASCII 码值)。
  • printf("%c", letter):按字符输出(打印对应符号)。

代码运行解析:

#include <stdio.h> 

int main(void)
{
  	char letter = 'A'; // 'A' 的 ASCII 为 65
  	printf("%d\n",letter);   // 输出 65
  	char digit = '9';        // 字符 '9' 的 ASCII 为 57
  	printf("%d\n",digit);    // 输出 57
    char exclamation = '!';  // '!' 的 ASCII 为 33
  	printf("%d\n",exclamation); // 输出 33
    
    char c = 78;             // 78 对应字符 'N'
	printf("%c\n",c);        // 输出 N
    printf("%c\n",65);       // 65 对应 'A',输出 A
    printf("%c\n",letter+1); // letter(65)+1=66 对应 'B',输出 B
	return 0;
}Code language: PHP (php)

输出结果对照(与截图完全一致):

65
57
33
N
A
B

4. 运算与整型提升

char 参与运算时,会先发生整型提升为 int 类型,计算后再赋值回去:

char letter = 'C'; // 67
letter = letter + 3; // 67+3=70,对应字符 'F'Code language: JavaScript (javascript)

若运算结果超过 char 范围(如 128 存入带符号 char),会发生截断/溢出,变成负数。

5. 注意

特性说明
存储大小​固定 1 字节(sizeof(char) == 1)
默认符号​取决于编译器(常见为带符号 signed char)
字符字面量​单引号 'A',多字符或字符串用双引号 "A"
整数溢出​存大整数会截断,建议明确用 signed/unsigned char
格式符​%c 输出字符,%d 输出整数 ASCII 码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注