1. 程式人生 > >位運算(&、|、^)與邏輯運算(&&、 ||)差別

位運算(&、|、^)與邏輯運算(&&、 ||)差別

邏輯與 清空 作用 一個數 總結 與運算 位或 定位 按位與

剛無意在一篇文章中看到了位運算(&、|)和邏輯運算(&&、||)的介紹。想起了自己薄弱的基礎知識。於是百度了幾把總結了下。

首先從概念上區分下,位運算是將運算符兩邊的數字換算成二進制(例:0000010001)後比較同樣位置上的0、1進行運算的。邏輯運算即比較運算符兩邊的邏輯值(true或false)。概念比較抽象。下邊借助實際樣例比較下。

位運算

先將每一個數轉換成二進制。然後進行。位或(|)表示相相應的每位至少有一個為1。則結果為1,僅僅有兩個都為0。結果才為0.位與(&)表示相相應的兩位必須都為1,結果才為1,否則為0。位異或(^)比較特殊,它比較的是假設兩個不同則值為1(如:(1、0)(0、1))。同樣(如:(1、1)(0、0))則為0。
比如: 3 |2
11 //二進制的3
10 //二進制的2
--------------------
11 //二進制的3

比如: 3 & 2
11
10
---------------------
10 //二進制的2


比如: 3^2

11

10

---------------------

01 //二進制的1

該樣例介紹的是位運算的原理,註意下這裏位運算|的結果是3。&的結果是2 這裏剛好和比較的數字2、3反復僅僅是個巧合,請不要以為位運算的結果是兩個數字中的一個。

邏輯運算

先將邏輯運算符(&& ||)兩邊的表達式都換算成邏輯值(true、false)。邏輯或(||)表示假設兩個值至少有一個為ture,則結果為true,僅僅有兩個都為false。結果才為false。

邏輯與(&&)表示兩個都為true。結果才為true,否則為false。這裏比較簡單,就不做樣例介紹了。



作用

邏輯運算的作用相信大家都知道。下邊來介紹下位運算的作用:

一、按位與 &
1、 清零特定位 (mask中特定位置0。其他位為1,s=s&mask) s=s&mask
2、取某數中指定位 (mask中特定位置1。其他位為0。s=s&mask) s=s&mask
二、按位或 |
經常使用來將源操作數某些位置1。其他位不變
三、按位異或
1、使特定位的值取反 (mask中特定位置1,其他位為0 s=s^mask)

2、把一個數自清零,如 a=a xor a 無論a是多少,最後a都等於零



為了讓大家對位運算的作用更清晰些。下邊再舉個樣例:

按位與運算通經常使用來對某些位清0或保留某些位。

比如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進制數為0000000011111111)。

高八位清0,保留低八位。僅僅要用一個數前邊8位為0(&的情況下有一個為0即為0,就意味著清空沒值了)後八位為1 (1與原數字(0、1)比較後值還為原數字的值,意味著保留原值)就可以成功。那麽這個數就是0000000011111111即255。



位運算(&、|、^)與邏輯運算(&&、 ||)差別