VC#2005快速入门之使用布尔操作符

快速入门

  布尔操作符(Boolean operator)是求值结果要么为true,要么为false的一种操作符。C#提供了几个非常有用的布尔操作符,其中最简单的是NOT(求反)操作符,它使用感叹号(!)来表示。!操作符求一个布尔值的反值。在上例中,假如变量areYouReady的值为true,那么表达式!areYouReady的求值结果就是false。

  理解相等和关系操作符

  两个更常用的布尔操作符是相等(==)和不等(!=)操作符。利用这两个二元操作符,可以判断一个值是否与相同类型的另一个值相等。表1展示了这些操作符是如何工作的,其中以一个名为age的int变量为例。

  表1 布尔操作符

操 作 符 含 义 示 例 结果(假定age = 42)
== 等于 age == 100 false
!= 不等于 age != 0 true

  与上述两个操作符密切相关的是关系操作符(relational operator)。利用这些操作符,可以判断一个值是否小于或大于同类型的另一个值。表2展示了如何使用这些操作符。

  表2 关系操作符

操 作 符 含 义 示 例 结果(假定age = 42)
&< 小于 age &< 21 false
&<= 小于或等于 age &<= 18 false
> 大于 age > 16 true
>= 大于或等于 age >= 30 true

  注意 不要混淆相等操作符(==)与赋值操作符(=)。像x==y这样的代码会比较x与y,如果两个值相同,就会返回true。相反,像x=y这样的代码会将y的值赋给x。

  理解条件逻辑操作符

  C#还提供了另外两个布尔操作符:逻辑AND(逻辑与)操作符,它使用&&来表示;以及逻辑OR(逻辑或)操作符,它使用||来表示。这两个操作符统称为条件逻辑操作符(conditional logical operator)。它们的作用是合并不同的布尔表达式,以构成一个更大的表达式。这两个二元操作符与相等及关系操作符的相似之处在于,它们的结果也是true或false。不同之处在于,它们操作的值(操作数)本身就必须是true或false。

  只有作为操作数的两个布尔表达式都为true的前提下,&&操作符的求值结果才为true。例如,只有在percent的值大于或等于零,而且percent的值小于或等于100的前提下,以下语句才会将true值赋给validPercentage:

bool validPercentage;

validPercentage = (percent >= 0) && (percent &<= 100);

  提示 新手常犯的一个错误是在合并两个测试的时候,只对percent变量命名一次,就像下面这样:

percent >= 0 && &<= 100 // 这个语句不能编译

  使用圆括号有助于避免这种类型的错误,同时也有助于澄清表达式。例如,可以对比一下以下两个表达式:

validPercentage = percent >= 0 && percent &<= 100

validPercentage = (percent >= 0) && (percent &<= 100)

  两个表达式返回的是同一个值,因为操作符&&的优先级低于>=和&<=。然而,第二个表达式采取更清晰易懂的方式表明了它的目的。

  两个操作符任何一个为true,操作符||的求值结果都为true。使用操作符||,我们可以判断两个条件中是否有任何一个成立。如果percent的值小于零,或者percent的值大于100,以下语句会将值true赋给invalidPercentage:

bool invalidPercentage;
invalidPercentage = (percent &< 0) || (percent > 100);


短路求值

操作符&&和||都具备一项名为短路求值(short circuiting)的特性。有时,根本没有必要将两个操作数都求值出来。例如,假定操作符&&的左操作数求值为false,那么整个表达式的结果肯定是false,不管右操作数的值是什么。类似地,如果操作符||的左操作数求值为true,那么整个表达式的结果肯定是true。在这些情况下,操作符&&和||将绕过对右侧的布尔表达式的求值。下面是一些例子:

(percent >= 0) && (percent &<= 100)

在这个表达式中,假如percent的值小于零,那么操作符&&左侧的布尔表达式会求值为false。该值意味着整个表达式的结果肯定为false,无论右侧的表达式是什么。所以,不会对右侧的表达式进行求值。

(percent &< 0) || (percent > 100)

在这个表达式中,如果percent的值小于零,操作符||左侧的布尔表达式会求值为true。该值意味着整个表达式的结果肯定为true。所以,不会对右侧的表达式进行求值。

如果能小心地设计表达式来使用条件逻辑操作符,就可以避免通过不必要的工作来提升代码的性能。将计算容易、简单的布尔表达式放到条件逻辑操作符的左边,将较复杂的表达式放到右边。在许多情况下,程序并不需要求值更复杂的表达式。

  操作符优先级和结合性总结

  表3总结了迄今为止学过的所有操作符的优先级和结合性。相同类别的操作符具有相同的优先级。一个更高类别中的操作符优先于较低类别中的操作符。

  表3 操作符小结

类 别

操 作 符

描 述

结 合 性


主要(Primary)

()

++

--


覆盖优先级

后递增

后递减



一元(Unary)

!

+

-

++

--


逻辑NOT

前递增

前递减



乘(Multiplicative)

*

/

%


求余



加(Additive)

+

-




关系(Relational)

&<

&<=

>

>=


小于

小于或等于

大于

大于或等于



相等(Equality)

==

!=


等于

不等于



条件AND(Conditional AND)

&&

逻辑AND


条件OR(Conditional OR)

||

逻辑OR


赋值(Assignment)

=

时间: 2016-07-07

VC#2005快速入门之使用布尔操作符的相关文章

VC#2005快速入门之复合赋值操作符

快速入门 前面讲过如何使用算术操作符来创建新值.例如,以下语句使用操作符+来创建比变量answer大42的一个值,新值将写入控制台: Console.WriteLine(answer + 42); 前面还讲过如何使用赋值语句来更改一个变量的值.以下语句使用赋值操作符将answer的值变成42: answer = 42; 如果希望在一个变量的值上加42,可以将赋值操作符与加法操作符合并到一起.例如,以下语句在answer上加42,并将新值赋给answer.换言之,在运行该语句之后,answer的值

VC#2005快速入门之使用if语句

快速入门|语句 如果想根据一个布尔表达式的结果选择执行两个不同的代码块,就可以使用if语句. 理解if语句的语法 if语句的语法格式如下(if和else是关键字): if ( booleanExpression ) statement-1;else statement-2; 如果booleanExpression求值为true,就运行 statement-1:否则就运行statement-2.else关键字和后续的statement-2是可有可无的.如果没有else子句,那么在booleanEx

VC#2005快速入门之使用while语句

使用while语句,可以在一个布尔表达式为true的前提下重复运行一个语句. while语句的语法如下: while ( booleanExpression ) statement 首先会对布尔表达式进行求值,如果为true,就运行语句,然后再次求值布尔表达式.如果表达式仍为true,就再次运行语句,并再次求值表达式.这个过程会反复进行下去,直到布尔表达式求值为false:届时,while语句将退出,并从while之后的第一个语句继续.while语句在语法上与if语句有许多相似的地方(事实上,两

VC#2005快速入门之使用do语句

while和for语句都在循环开始的时候测试它们的布尔表达式.这意味着假如在首次测试时,布尔表达式就求值为false,那么循环主体一次都不会运行.do语句则不同,它的布尔表达式是在每次重复之后求值的,所以主体至少会执行一次. do语句的语法如下(不要忘记最后的分号): do statement while (booleanExpression); 如果循环主体由多个语句构成,请使用一个语句块.下面是在控制台上输出0-9的那个例子的do语句版本: int i = 0; do { Console.W

Visual C# 2005快速入门之调用方法

visual|快速入门 方法之所以存在就是为了被调用!使用方法名来调用一个方法,要求它执行它的任务.如果方法要获取信息(由它的参数指定),就必须提供它需要的信息.如果方法要返回信息(由它的返回类型指定),就应该以某种方式来捕捉这个信息. 指定方法调用语法 为了调用一个C#方法,需要采用如下语法形式: methodName (argumentList) methodName(方法名)必须与调用的那个方法的名称完全一致.记住,C#语言是区分大小写的.argumentList(参数列表)用于提供将由方

Visual C# 2005快速入门之编写方法

visual|快速入门 在下面的练习中,将创建一个应用程序,它包含的一个方法能够计算一名顾问的收费金额--假定该顾问每天收取固定的费用,将根据工作了多少天来收费.首先要开发应用程序的逻辑,然后利用"生成方法存根向导"来写出这个逻辑使用的方法.接着,我们将在一个控制台应用程序中运行方法,以获得对该程序的最终印象.最后,我们将使用Visual Studio 2005调试器来检查方法调用. 开发应用程序逻辑 1. 在Visual Studio 2005中打开My Documents文件夹下的

Visual C#2005快速入门之声明bool变量

visual|变量|快速入门 与现实世界不同,在编程的世界中,每一件事情要么黑,要么白:要么对,要么错:要么是真的,要么是假的.例如,假定你创建一个名为x的整数变量,把值99赋给x,然后问:"x中包含了值99吗?"答案显然是肯定的.如果你问:"x小于10吗?"答案显然是否定的.这些正是布尔(Boolean)表达式的例子.一个布尔表达式肯定求值为true或false.   注意 对于这些问题,并非所有编程语言都会做出同样的回答.例如,一个未赋值的变量有一个未定义的值,

Visual C#2005快速入门之switch语句

visual|快速入门|语句 某些时候,在嵌套使用if语句时,所有if语句看起来都非常相似,因为它们都在对一个完全相同的表达式进行求值,惟一的区别是每个if语句都将表达式的结果与一个不同的值进行比较.例如: if (day == 0) dayName = "Sunday";else if (day == 1) dayName = "Monday";else if (day == 2) dayName = "Tuesday";else if (da

Visual C# 2005快速入门之运用作用域

visual|快速入门 前面已经展示了一些在方法内部创建变量的例子.变量从定义了它的语句开始存在,同一个方法内的后续语句可以使用该变量.换言之,变量只能在创建了之后才能使用.方法执行完毕后,变量也会彻底消失. 假如一个变量能在程序中的一个特定位置使用,就说明该变量具有那个位置的作用域.也就是说,一个变量的作用域(scope)是指能够使用该变量的程序区域.作用域既作用于方法,也作用于变量.一个标识符(不管它代表变量还是代表方法)的作用域是从声明明该标识符的那个位置开始的. 定义局部作用域 界定方法