天轟穿C#教程之布爾邏輯運算子【原創】

來源:互聯網
上載者:User

  考慮下述情形:要根據變數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的資料。

 

  本文為天轟穿原著,轉載請註明出處及作者!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.