首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

要作出决策,需要一种比较机制,而比较有几种类型。像“如果交通信号灯是红色,就停车”这样的决策就涉及到相等比较。在这种情况下,需要比较信号灯的颜色和参考颜色(即红色),如果它们相同,就停车。另一方面,像“如果车速超过极限值,就减速”这样的决策涉及到另一种关系:检查车速是否大于当前的速度极限值。这两种比较是类似的,因为它们都会得到下面两个值中的一个:真或假。这就是C++中的比较过程。

使用一些运算符就可以比较数据值,这些运算符称为关系运算符。用于比较两个值的有6个基本运算符,如表4-1所示。

表4-1 关系运算符

关系运算符

说 明

关系运算符

说 明

<

小于

<=

小于等于

>

大于

>=

大于等于

==

等于

!=

不等于

注释:

其中的“等于”比较运算符(==)是两个连续的等号,它不同于只包含一个等号的赋值运算符(=)。在进行相等比较时,常常容易犯只使用一个等号的错误。对此,编译器一般不会发出错误消息,因为表达式可能是有效的,只是不能得出我们希望的结果。所以用户需要非常小心,避免出现这种错误。

这些二元运算符都是比较两个值,如果比较是真,就返回true,否则就返回false。值true和false是C++中的关键字,也是一种新的字面量,称为布尔字面量(以布尔代数之父George Boole的名字命名),其类型是bool。

如果把值true强制转换为整数类型,结果就是1,如果把值false强制转换为整数类型,结果就是0。还可以把数值强制转换为bool类型。0会强制转换为false,其他非0值则强制转换为true。

与其他标准类型一样,也可以创建bool类型的变量,来存储布尔值。声明该变量的方法与声明其他类型的变量一样,例如:

bool decision = true; //Declare, define and initialize a logical variable

这个语句把变量decision声明并定义为布尔类型,还给它赋予初始值true。

4.1.1 应用比较运算符

下面介绍几个使用比较运算符的例子,说明其工作原理。假定有两个整数变量i和j,其值分别是10和–5。在下面的逻辑表达式中使用它们:

i >j i!=j j >–8 i <= j + 15

这些表达式都等于true。注意在最后一个表达式i <= j + 15中,相加运算j + 15要先执行,因为+的优先级高于<=的优先级。可以在bool类型的变量中存储这些表达式的结果。例如:

decision = i >j; //true if i is greater than j, false otherwise

如果i大于j,就在bool变量decision中存储true,否则就存储false。

也可以比较char类型的变量。假定定义了下面的变量:

char first = 'A';

char last = 'z';

现在编写使用这些变量的比较示例,如下所示:

first < last 'E' <= first first != last

第一个表达式检查first的值'A'是否小于last的值'z',这总是true。参考附录A中这些字符的ASCII编码,就可以验证这一点。大写字母用一组递增的数值65~90来表示,65表示'A',90表示'Z'。第二个表达式的结果为false,因为'E'大于first的值。最后一个表达式是true,因为'A'肯定不等于'z'。

输出bool值与输出其他类型的值一样简单,下面举一个例子。

程序示例4.1—— 比较数据值

这个例子从键盘上读取两个char值,输出比较它们的结果:

//Program 4.1 Comparing data values

#include <iostream>

using std::cin;

using std::cout;

using std::endl;

int main() {

char first = 0; //Stores the first character

char second = 0; //Stores the second character

//Prompt for and read in the first character

cout<<"Enter a character:";

cin>> first;

//Prompt for and read in the second character

cout << "Enter a second character:";

cin >> second;

cout << "The value of the expression first < second is: "

<< ( first < second)

<< endl

<< "The value of the expression first == second is: "

<< ( first == second)

<< endl;

retuen 0;

}

这个程序输出的结果如下所示:

Enter a character: p

Enter a second character: t

The value of the expression first < second is: 1

The value of the expression first == second is: 0

例子的说明

提示用户输入,并从键盘上读取字符的过程是前面介绍过的标准过程。在下面的语句中输出应用<和==运算符的结果:

cout << "The value of the expression first < second is: "

<< (first < second)

<< endl

<< "The value of the expression first == second is: "

<< (first == second)

<< endl;

注意把比较表达式括起来的括号是必不可少的,否则编译器就不能正确解释该语句,而输出错误消息。该表达式比较用户输入的第一个和第二个字符。从上面的输出结果可以看出,值true显示为1,值false显示为0。

true和false的输出值1和0是true和false的默认表示。如果希望布尔值在屏幕上显示为true和false,可以使用输出操纵程序boolalpha来实现。在main()的开头添加下面的语句:

cout << std::boolalpha;

如果再次编译并运行这个例子,bool值就会显示为true或false。要在程序中把布尔值的结果返回为默认设置,可以使用操纵程序noboolalpha。

4.1.2 比较浮点数值

当然,也可以比较浮点数值。考虑一个略复杂的数值比较。首先,用下面的语句定义一些变量:

int i =–10;

int j = 20;

double x = 1.5;

double y =–0.25E–10;

现在看看下面的逻辑表达式:

–1 < y j < (10-i) 2.0*x >= (3+y)

在表达式中,可以把数据值用作比较中的操作数。因为比较运算符的优先级总是低于算术运算符(参见附录D),所以不需要使用括号,但使用括号有助于使表达式更容易理解。

第一个比较的结果是true,因为变量y是一个非常小的负值(–0.000000000025),它大于–1。第二个比较的结果是false,因为表达式10–i的值是20,与j相同。第三个表达式为true,因为3+y略小于3。

可以使用关系运算符比较任何基本类型的值,现在需要一种实用的方式来使用比较的结果,以改变程序的行为。下面就介绍这些内容。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论