### 关系运算符和逻辑运算符

在现实生活中，人们的语言（自然语言）所能表达的逻辑关系可以非常复杂。为了在计算机中描述这种逻辑关系，计算机语言的专家们对人类自然语言的逻辑关系进行了总结，无论多么复杂的逻辑关系都是由简单的几个关系构成的，即大于、小于、等于、大于等于、小于等于和不等于这 6 种。这 6 种关系的结果是一个布尔类型，只有两个值，即真（true）和假（false）。在 C++语言中对应的运算符如表 1 所示。

表 1 C++关系运算符

关系运算符 | 描述
> | 大于
< | 小于
== | 等于
>= | 大于等于
<= | 小于等于
!= | 不等于

下面我们举一个例子。

“如果今天不下雨，我们就去放风筝”，这是一个最简单的逻辑关系。如果使用语言来描述它在程序中的实现，可以为“天气不等于雨，……”。使用代码描述，可以采用如下的形式。

//定义一个表示天气的枚举类型

typedef enum Weather{WH_RAIN = 0, WH_SUN = 1, WH_WIND = 2, SH_SNOW = 3};

int main(int argc, char* argv[])

{

Weather today = WH_SUN; //定义一个变量 today 表示今天的天气

if (today != WH_RAIN) //如果天气不等于雨

{

cout << "我们去放风筝" << endl; //我们去放风筝

}

return 0;

}

在上述语句中 today != WH_RAIN 构成了一个关系表达式，该表达式由一个关系运算符和两个操作数构成，在一个关系表达式中还可以包含多个关系运算符。例如：

today != WH_RAIN != WH_WIND //关系表达式由多个运算符构成

在上面的语句中，关系表达式中包含了两个!=关系运算符。关系表达式的结果是什么呢？

对于关系运算符来说，其结合性从左向右，因此关系表达式“today != WH_RAIN != WH_WIND”首先比较“today != WH_RAIN”，其结果为 1（true），然后进行“1 != WH_WIND”计较，而不是进行“today != WH_WIND”的比较，因此最后表达式的结果为 1（true）。

这里需要说明的是表达式“today != WH_RAIN != WH_WIND”并不规范，在编写代码时应该尽量避免出现类似的代码，在此之所以进行介绍，是为了体现 C++语言的一个特点。

使用关系运算符不能够清晰地描述更为复杂的逻辑关系，因为一个复杂的逻辑通常会包含多个小的逻辑关系。只使用关系运算符需要编写大量嵌套的 if 语句，增加代码的长度。我们举一个例子。

“如果今天不下雨，并且不下雪，我们就去放风筝”。

该语句包含了两个逻辑关系，天气不等于雨，并且天气不等于雪。只使用关系运算符需要两个嵌套的 if 语句来实现。

Weather today = WH_SUN; //定义一个变量 today 表示今天的天气

if (today != WH_RAIN ) //如果天气不下雨

{

if (today != SH_SNOW) //并且不下雪

cout << "我们去放风筝" << endl; //我们去放风筝

}

如果我们的逻辑更为复杂，有多个逻辑条件，则代码中需要多个嵌套的 if 语句。为了使用计算机语言简化逻辑关系的描述，计算机语言的专家们提出了逻辑运算符的概念。逻辑运算符主要是实现了人类语言中并且、或者等连词在计算机中的表示。使用逻辑运算符可以连接关系表达式以构成复杂的逻辑表达式。C++中共有 3 种逻辑运算符，分别为“&&”、“||”和“!”。其中“&&”表示逻辑与运算符，也就是“并且”的含义，当两个表达式同时为真，其结果为真，否则为假。“||”表示逻辑或运算符，即“或者”的含义，当两个表达式中有一个表达式为真，结果为真，否则为假。“！”表示逻辑或运算符，即当表达式的值为真，结果为假，当表达式的值为假，其结果为真。表 2 描述了逻辑运算符的运算方式。

表 2 逻辑运算符真值表

逻辑运算符 | 表达式 1 | 表达式 2 | 结果
&& | 真 | 真 | 真
&& | 真 | 假 | 假
&& | 假 | 真 | 假
&& | 假 | 假 | 假
|| | 真 | 真 | 真
|| | 真 | 假 | 真
|| | 假 | 真 | 真
|| | 假 | 假 | 假
! | 真 |  | 假
! | 假 |  | 真

说明：有人用一句口诀用来形容“&&”运算符，那就是“都真才真”；而用“都假才假”来形容“||”运算符。

下面利用逻辑运算符来实现“如果今天不下雨，并且不下雪，我们就去放风筝”语句的计算机表示。

Weather today = WH_SUN; //定义一个变量 today 表示今天的天气

if (today != WH_RAIN && today != SH_SNOW) //今天不下雨，并且不下雪

{

cout << "我们去放风筝" << endl; //我们去放风筝

}