1. 布尔变量 bool #
bool 变量的取值范围:
true
false
其中,它们的值也可以使用整数来表示。
true 可以用 1 表示
false 可以用 0 表示
请看以下代码:
int main()
{
    bool var(true); // 声明一个 bool 变量,并初始化
    bool is_ok;         // 声明一个 bool 变量
    is_ok = false;      // 赋值
    is_ok = 0;          // 赋值
    is_ok = true;       // 赋值
    is_ok = 1;          // 赋值
    is_ok = 20;         // 请运行,然后在调试中查看结果
    is_ok = -15;        // 请运行,然后在调试中查看结果
    return 0;
}
在这样的例程中,很难看出来 bool 变量存在的意义。
而一个 bool 变量,只有在“比较关系”中才可以真正看到它的价值。
1.1 bool 变量的意义 #
所以,下面,我们先来写一个数学上的“比较关系式”。
假设有两个数,20 和 25,请问数学中是怎么描述它们的大小关系?
20 < 25
下面我们写一段代码,来表示这样的关系。
int main()
{
    bool is_lower;         // 声明一个 bool 变量
    is_lower = 20 < 25;    // 判断 20 是否小于 25
                           // 请问,is_lower 的值是 true 还是 false?
    is_lower = (20 < 25);    // 可以使用括号
    return 0;
}
1.2 bool 变量的输出 #
下面我们来验证一下。
我们依然可以使用 cout 来输出 bool 变量的值。
请运行下面的代码:
#include <iostream>
using namespace std;
int main()
{
    bool is_lower;         // 声明一个 bool 变量
    is_lower = 20 < 25;    // 判断 20 是否小于 25
                           // 输出 bool 变量
    cout << "is_lower = " << is_lower << endl;
    return 0;
}
注意:cout 是将 bool 变量对应的整数值,作为结果输出的。
1.3 bool 变量的输入 #
我们依然可以使用 cin 来输入一个 bool 值。
请运行下面的代码:
#include <iostream>
using namespace std;
int main()
{
    bool is_lower;         
    cout << "请输入 0 或者 1:" << endl;        
    cin >> is_lower;                           // 输入 bool 变量
    cout << "is_lower = " << is_lower << endl; // 输出 bool 变量
    return 0;
}
注意:输入 bool 值时,需要使用对应的整数值,作为输入。
2. 字符类型 char #
2.1 char 的数值 #
| 类型名称 | char | unsigned char | 
| 所占字节数 | 1 | 1 | 
| 表示范围 | -128~127 | 0~255 | 
- char 和 unsigned char 的大小都是 1 字节(Byte)
- unsigned char 本身为一个整型,表示范围为 0 ~ 255
- char 本身为一个整型,表示范围为 -128~127
下面,我们来使用一下 char,请看代码
#include <iostream>
using namespace std;
int main()
{
    // 定义、初始化、赋值
    char ch1;
    ch1 = 5;
    char ch2(6);
    char ch3 = 8;
    return 0;
}
这些是常规用法,现在来看一下
#include <iostream>
using namespace std;
int main()
{
    // 定义、初始化、赋值
    char ch1;
    ch1 = 'A';
    char ch2('b');
    char ch3 = 'C';
    return 0;
}
C++ 中,char 除了可以表示一个数值以外,还被用来表示“字符”。
名词解释:“字符”
字符,其实就是一个英文字母、数字、特殊符号。
这里有两个关键词:
- 一个
- 英文字母、数字、特殊符号
汇总如下:
2.2 ASCII #

一般,我们需要重点关注的是“ASCII 打印字符”。
请注意:为了区别,C++ 使用单引号(’)来表示字符常量。
请看代码:
#include <iostream>
using namespace std;
int main()
{
    char ch1;                        // 赋值为字符 'A'
    ch1 = 'A';
    char ch2;
    ch2 = 65;                       // 赋值为数字 65
    cout << "ch1 = " << ch1 << endl; // 输出字符变量
    cout << "ch2 = " << ch2 << endl; // 输出字符变量
    return 0;
}
是不是发现,输出为
ch1 = A ch2 = A
对于字符变量的赋值,请注意:
- 字符变量,使用字符赋值,字符会转化成对应的数值,存储到变量中。
- 字符变量,使用数值赋值,数值将直接,存储到变量中。
- 字符变量,使用数值赋值,数值范围不可超过 [0, 127]。
对于字符变量的输出,请注意:
- 字符变量,输出时,存储的数值,将转化成 ASCII 中对应的字符,然后输出到屏幕。
这就体现了 C++ 中, char 类型的特殊性。
这里请注意,char 和 unsigned char 都可以使用,但是必须注意取值范围。
- [0, 127]
超出范围的赋值,不会报错,但是它的值就不确定了。请特别注意。
#include <iostream>
using namespace std;
int main()
{
    char ch;                              // 赋值为字符 'A'
    ch = 'A';
    unsigned char uc;                    // 可以使用 unsigned char
    uc = 65;                             // 赋值为数字 65
    cout << "ch  = " << ch  << endl;       // 输出字符变量
    cout << "uc = " << uc << endl;       // 输出字符变量
    return 0;
}
3. 关系运算符 #
在数学中,我们学习过数值大小关系的表达。
在 C++ 中,大多数的数学关系,都是相同的。不过,由于一些数学上的符号,
在键盘上不能直接打出来。所以 C++ 的“关系运算符”上,和数学略有不同。
下表中,展示了这些不同。
关系运算符的示例:
a > b; // 大于 a >= b; // 大于等于 a < b; // 小于 a <= b; // 小于等于 a == b; // 等于 a != b; // 不等于
4. 关系表达式 #
C++ 中,将含有“关系运算符”的表达式,称为“关系表达式”。
上面的示例代码中,全部都属于“关系表达式”。
我们在之前的例程中演示了使用“关系表达式”给 bool 变量赋值。
下面,总结一下“关系表达式”的常用情况。
int main()
{
    5 > 6;                        // 关系表达式
    bool b_0 = 5 > 6;             // b_0 的值为 false
    bool b_1 = 5 < 6;             // b_1 的值为 true
    bool b_2 = (5 > 6);           // b_2 的值为 false
    bool b_3 = 5 > (6-5);         // b_3 的值为 true
    int  a   = 10;
    bool b_4 = 5 > a;             // b_4 的值为 false
    int  a = 15;
    bool b_5     = a != a;  // b_5 的值为 true
    bool b_6     = a!=7;    // b_6 的值为 true,空格可以省略
    bool result;
    result =   5 > = 6;           // 【错误写法】>= 中间不能有空格
    result =   5 < = 6;           // 【错误写法】<= 中间不能有空格
    result =   5 = = 6;           // 【错误写法】== 中间不能有空格
    result =   5 ! = 6;           // 【错误写法】!= 中间不能有空格
    return 0;
}
表达式中,数值/变量 和 符号 之间的空格可以省略
请口头判断下面表达式的值。
10 > 8; 10 >= 8; 1 < 8; 1 <= 8; 1 == 8; 1 != 8; int a(50); a != 50; a == 50; a >= 50; a <= 50;