最近上網查詢了一下這兩者之間的差別,後來發現這個概念很基礎,但我一直沒將它搞清楚,因為過去我大多只用了logic operator來寫程式,在網路上我找到兩篇蠻不錯的說明:
http://www.blackwasp.co.uk/CSharpBooleanOperators.aspx
http://www.blackwasp.co.uk/CSharpLogicalBitwiseOps.aspx
經過上次laneser的指教,最近上網查詢了一下這兩者之間的差別,後來發現這個概念很基礎,但我一直沒將它搞清楚,因為過去我大多只用了logic operator來寫程式,在網路上我找到兩篇蠻不錯的說明,首先先看看C#的operator,
http://www.blackwasp.co.uk/CSharpBooleanOperators.aspx
嚴格來說=、!、&、&&、|、||等等都算是logic operator,但&跟&&或者|跟||之間其實是有其差異的,我們先講比較常見的&&跟||,我們在使用的時候常用來做變數比對或者邏輯判斷,如下:
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
2
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
3
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
4
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
5
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
6
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
7
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
8
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
9
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
那&跟|又是什麼東西呢?在程式中我們這樣寫:
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
2
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
3
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
很多情況下跟上面的寫法(&&、||)比起來,輸出的結果好像都一樣,如果我們以一般的boolean運算來看的話,或許是這樣,但其實&、|的用途不只這些,回想一下再計算機概論中學到的邏輯閘(AND、OR、XOR)好像是用來作位元的邏輯運算,關於這部分我們參考一下下面這篇:http://www.blackwasp.co.uk/CSharpLogicalBitwiseOps.aspx
其中一個例子是這樣寫的:
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
2
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
3
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
4
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
5
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
將數值以二進位的方式作邏輯閘的運算並得出結果,如以上的範例就是將10111011跟00000100做OR,最後得出10111111,換算後就是191了。
就&、|來說,在處理邏輯運算時,會先將值轉成二進位值,false是0,true通常是1,然後再透過邏輯閘來得出結果,所以以&、|跟&&、||來作邏輯判斷時,在某些狀況下會有效率上的差別:
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
2
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
3
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
4
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
5
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
6
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
7
![](http://www.dotblogs.com.tw/Providers/BlogEntryEditor/FCKeditor/editor/dialog/InsertCode/codeimages/InBlock.gif)
以上面的例子來看,第一個使用了||來運算,只要A為true,其實就不用計算B的結果了,但以|來運算的,必須要將A跟B都轉成二進位值才能判斷是否滿足,這兩者在這種狀況下就有所差異了,但這只是一個小案例,一般我們比較少這樣寫,但兩者確實有所差異。
![]() |
游舒帆 (gipi) 探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。 |