流程控制-布尔逻辑

    到目前为止,我们看到的C#程序的执行都是一行接一行、自上而下的进行,不遗漏任何代码。如果所有的应用程序都这样执行,那我们能揍的工作就太有限了。

    这里介绍控制程序流程的两种方法:

     1、分支——有条件的执行代码。条件取决于计算的结果,例如“如果myVal小于0”,就只执行这行代码”。

     2、循环——重复执行相同的语句(重复执行一定的次数,或者在满足测试条件后停止执行)。

    这两种方法都要用到布尔逻辑。前面介绍的bool类型可以有两个值:true或false。这种类型常常用于记录某些操作的结果,以便操作这些结果。bool类型可用于存储比较过的结果。

    考虑下述情形:如果根据变量myVal是否小于10,来确定是否执行代码。为此,需要确定语句“myVal小于10”的真假,即需要知道比较的布尔结果。

    布尔比较需要使用布尔比较运算符(也称为关系运算符),如下所述。这里var1都是bool类型的变量,var2和var3则可以是各种类型。

==:var1=var2==var3;如果var2等于var3,那么var1的值就是true,否则为false。

!=:var1=var2!=var3;如果var2不等于var3,那么var1的值就是true,否则为false。

<:var1=var2<var3;如果var2小于var3,那么var1的值就是true,否则为false。

>:var1=var2>var3;如果var2大于var3,那么var1的值就是true,否则为false。

<=:var1=var2<=var3;如果var2大于等于var3,var1的值就是true,否则为false。

>=:var1=var2>=var3;如果var2小于等于var3,var1的值就是true,否则为false。

    在代码中,可以对数值使用这些运算符,如下所示:

     bool isLessThan10;

     isLessThan10 = myVal < 10;

    如果myVal存储的值小于10,这段代码就给isLessThan10赋予true值,否则赋予false值。

    也可以对其他类型使用这些比较运算符,例如字符串:

     bool isKarli;

     isKarli = myString == "karli";

    如果myString存储的字符串是Karli,isKarli的值就位true,否则为false。

    也可以对布尔值使用这些运算符:

     bool isTrue;

     isTrue = myBool == true;

    但只能使用==和!=运算符。

    注意:假定var1<var2是false,则var1>var2为true,此时会产生一个错误。如果var1==var2,则两个语句都是false。

    在处理布尔值时,还有其他一些布尔运算符,如下所示:

     !:var1=!var2;如果var2是false,var1的值就是true,否则为false(逻辑非)。

     &:var1=var2&var3;如果var2和var3都是true,var1的值就是true,否则为false(逻辑与)。

     |:var1=var2|var3;如果var2或var3是true(或两者都是),var1的值就是true,否则为false(逻辑或)。

     ^:var1=var2^var3;如果var2或var3中有且只有一个是true,var1的值就是true,否则为false(逻辑异或)。

    上面的代码也可以表述为:

     bool isTrue;

     isTrue = myBool & true;

     &和|运算符也有两个类似的运算符,称为条件布尔运算符:

     &&:var1=var2&&var3;如果var2和var3都是true,var1的值就是true,否则为false(逻辑与)。

     ||:var1=var2||var3;如果var2或var3是true(或两者都是),var1的值就是true,否则为false(逻辑或)。

    这些运算符的结果与&和|完全相同,但得到结果的方式有一个重要区别:其性能比较好。两者都是检查第一个操作数(var2),再根据该操作数的值进行操作,可能根本就不需要第二个操作数的值(var3)。

    如果&&运算符的第一个操作数是false,就不需要考虑第二个操作数的值了,因为无论第二个操作数的值是什么,其结果都是false。同样,如果第一个操作数是true,||运算符就返回true,不必考虑第二个操作数的值。

    但上面的&和|条件布尔运算符却不是这样。它们的操作数总是要计算的。

    因为操作数的计算是有条件的,如果使用&&和||运算符来代替&和|,性能会有一定的提高。在大量使用这些运算符的应用程序中比较明显的。作为一个规则,尽可能使用&&和||运算符

    注意这些运算符有时候用于比较复杂的情形,例如,只有第一个操作数包含某个值时,才计算第二个操作数:

     var1 = (var2 != 0) && (var3 / var2 >2);

    如果var2是0,则var3除以var2就会导致“除0错误”,或者把var1定义位无穷大(对于某些类型如float来说,后则是可能的,也是可以检测到)。

posted @ 2009-03-07 23:55    阅读(262)  评论(0编辑  收藏  举报