char变量存储的是字符对应的ascii码值(如'a'存65),而非字符本身,因计算机硬件只能处理二进制数字,字符需通过编码表映射为整数才能存储。

char 变量保存的是数字,不是字符本身。
为什么说它存的是数字而不是字符
计算机硬件只能存储二进制位,无法直接存“字符”这个抽象概念。当你写 char c = 'A';,编译器会查 ASCII 表,把字符 'A' 换算成整数 65,再把这个 65(二进制 01000001)放进内存的 1 字节里。
同理:
-
'0'存的是48,不是数字零本身 -
'a'存的是97 -
'\0'(空字符)存的是0,这是字符串结尾标记
常见错误现象:混淆字符和对应数字
比如这段代码:
char c = '5'; int x = c + 1; cout <p>因为 <code>'5'</code> 的 ASCII 值是 <code>53</code>,<code>53 + 1 = 54</code>,而 <code>54</code> 对应字符 <code>'6'</code>。如果真想把字符 <code>'5'</code> 当作数字 5 用,得手动减去 <code>'0'</code>:</p>
-
c - '0'→ 得到整数5 -
c - 48→ 效果一样,但不推荐硬编码数字
char 类型的有符号性会影响数值解读
char 在不同平台可能默认是 signed char 或 unsigned char,这会影响你把它当整数用时的取值范围:
- 如果是
signed char:能表示-128到127,'\xFF'(即 255)会被解释成-1 - 如果是
unsigned char:能表示0到255,'\xFF'就是255 - 打印时用
%c还是%d,输出结果完全不同:printf("%c", c)显示字符,printf("%d", c)显示数字
真正容易被忽略的点是:哪怕你只用来存字母或标点,char 的底层始终是整数;一旦做算术、比较、类型转换,就立刻暴露这个本质——它不是容器,它就是个 1 字节的整数槽。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











