现在的位置: 首页 > 综合 > 正文

天轰穿C#教程之布尔逻辑运算符【原创】

2012年08月21日 ⁄ 综合 ⁄ 共 2588字 ⁄ 字号 评论关闭

  考虑下述情形:要根据变量var是否小于10,来确定是否执行代码。为此,需要确定语句"var小于10"的真假(小于为真,既true;不小于则为假,既false),即需要知道比较的布尔结果

  布尔比较需要使用布尔比较运算符(也称为关系运算符),如下表所示。这里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

 

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

 

  int a = 10, b = 11;

 

  bool var9 = a > b; //值为false

 

  如果变量a的值大于变量b的值,这段代码就给变量var9赋予true值,否则赋予false值。

 

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

 

  string name = "天轰穿";

 

  bool var10 = name == "老田";  //值为false

 

  bool var11 = name != "老田";

 

  如果name存储的字符串是"老田",var10的值就为true。在本例中,name的值是"天轰穿",不等于"老田",所以本例的值为false;猜猜var11的值应该是什么?

 

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

 

  bool var12=false, var13;

 

  var13 = var12 == true; //值为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 var14 = false, var15, var16 = false, var17 = true, var18, var19,var20;

 

  var15 = !var14;     //值为true

 

  var18 = var16 & var17; //值为false

 

  //完全用表达式作为对比条件

 

  var19 = 10 > 5 & 7 < 4;  //这里&号两边用的是表达式而不是单独的值,猜下值为多少

 

  string str5 = "天轰穿", str6 = "老田";//申明两个字符串类型变量,下面用来做比较

 

  int sum1 = 10, sum2 = 20;              //申明两个INT类型变量,下面用来做比较

 

  var20 = str5 != str6 & sum1 >= sum2;   //值为false

 

  Console.WriteLine("var15={0},var18={1},var19={2},var20={3}"

 

  , var15, var18,var19,var20);

 

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

 

  

运算符  类别  示例表达式  结果
 
&&  二元  var1 = var2 && var3;  如果var2和var3都是true,var1的值就是true,否则为false (逻辑与)
||  二元  var1 = var2 || var3;  如果var2或var3是true(或两者都是),var1的值就是true,否则为false (逻辑或)

 

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

 

  如果&&运算符的第一个操作数是false,就不需要考虑第二个操作数的值了,因为无论第二个操作数的值是什么,其结果都是false。同样,如果第一个操作数是true,|| 运算符就返回true,无需考虑第二个操作数的值。但上面的&和 | 运算符却不是这样。它们的操作数总是要计算的。

 

  因为操作数的计算是有条件的,如果使用&&和||运算符来代替&和 | ,性能会有一定的提高。在大量使用这些运算符的应用程序中是比较明显的。作为一个规则,尽可能使用&&和 || 运算符。这些运算符有时用于比较复杂的情形,例如,只有第一个操作数包含某个值时,才计算第二个操作数:

 

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

 

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

 

  小天:既然&&和||的效率更高,上面为什么会详细讲&和 | 运算符。

 

  老田:是因为这两种运算符都可以用于对数值执行操作,另外用法都基本一样,所以就选一个讲详细点了。另外,&和 | 最重要的在于它们处理存储在变量中的一系列位,而不是变量的值。

 

  由于位运算对很多初学者来说,很容易晕头转向,同时,该知识点也并不妨碍我们对后面的知识的学习(这里不是说位运算没有用)。所以有兴趣的朋友可以去参考MSDN的数据。

 

  本文为天轰穿原著,转载请注明出处及作者!

抱歉!评论已关闭.