char 为什么是数字?字符与布尔值讲清楚
char 表面存字符,实际存的是字符的编号:'A' 就是 65。所以 char 能做算术,
'A' + 1 得到 'B'。bool 只有 true 和 false 两个值,输出时显示为 1 和 0。
char:一个字符,一个数字
char 类型存单个字符。计算机不直接认识字母,存下的是字符的编号——这套编号叫 ASCII:
'A'是 65,'B'是 66,依此类推'a'是 97,'0'是 48(字符 0,不是数字 0)
char c = 'A';
cout << c << endl; // A(按字符显示)
cout << (int)c << endl; // 65(按编号显示)
char d = c + 1; // 66,即 'B'
cout << d << endl; // B
(int)c 是把 char 临时转成 int 来看它的编号。既然 char 本质是数字,c + 1 就是下一个编号、下一个字符。判断大写转小写(c + 32)、数字字符转数字(c - '0')都建立在这个事实上。
bool:只有真与假
bool 类型只有两个值:true(真)和 false(假):
bool ok = true;
cout << ok << endl; // 输出 1
输出时 true 显示为 1,false 显示为 0。bool 是程序的"判断结果载体"——上一课的 c == 0.3 算出来的就是一个 bool。之后的条件、循环全靠它驱动。
可视化观察
在 CppStudio 中打开本课示例,点击播放:
- 执行
char c = 'A';后,监视区出现 c——对照接下来的输出理解"存的是编号"; - 两条 cout 先后输出
A和65,同一个变量的两种面貌; - 执行
c + 1得到 d,输出B——字符算术的完整证据链; - bool 变量 ok 输出
1,记住这个显示规则,后面判断题都会遇到。
常见错误
- 单双引号混用:
char c = "A";编译报错,char 必须用单引号; - 把字符 '0' 当数字 0:
'0' - '0'得 0,'1' - '0'得 1——字符数字转数值要减'0'; - 以为 bool 能装"第三种值":给 bool 赋任何非零值都会变成 true,不存在 2。
下一课:一次定义多个变量——连续定义的写法与初始化细节。
▶ 运行本课示例 弹窗里直接跑,流程图同步展开;也可新窗口打开
常见问题
char 是什么类型?
字符类型,存一个字符。本质上存的是字符的编号:'A' 存的是 65,'a' 是 97。这套编号规则叫 ASCII,所以 char 可以参与加减运算。
'A' 和 "A" 一样吗?
不一样。'A' 是 char,本质是数字 65;"A" 是字符串,是文本类型。单引号与双引号不能混用(回顾第 6 课字面量)。
bool 输出的为什么是 1 和 0?
bool 存 true 和 false,输出时 true 显示为 1,false 显示为 0。条件判断、循环控制都依赖 bool,后续章节会大量使用。
ASCII 表需要背吗?
不需要。记住三个锚点就够用:'0' 是 48,'A' 是 65,'a' 是 97,其余字符的编号可以由此推算。