位運算及其應用詳解
轉自:http://blog.chinaunix.net/uid-21411227-id-1826986.html
一.邏輯運算子
1.& 位與運算
1) 運算規則
位與運算的實質是將參與運算的兩個資料,按對應的二進位制數逐位進行邏輯與運算。例如:int型常量4和7進行位與運算的運算過程如下:
4=0000 0000 0000 0100 &7 =0000 0000 0000 0111= 0000 0000 0000 0100
對於負數,按其補碼進行運算。例如:例如:int型常量-4和7進行位與運算的運算過程如下: -4=1111 1111 1111 1100 &7 =0000 0000 0000 0111= 0000 0000 0000 0100
2) 典型應用
(1) 清零
清零:快速對某一段資料單元的資料清零,即將其全部的二進位制位為0。例如整型數a=321對其全部資料清零的操作為a=a&0x0。 321=0000 0001 0100 0001 &0=0000 0000 0000 0000
= 0000 0000 0000 0000
(2) 獲取一個數據的指定位
獲取一個數據的指定位。例如獲得整型數a=的低八位資料的操作為a=a&0xFF。321=
0000 0001 0100 0001 & 0xFF =0000 0000 1111 11111
= 0000 0000 0100 0001
獲得整型數a=的高八位資料的操作為a=a&0xFF00。==a&0XFF00==
321=0000 0001 0100 0001 & 0XFF00=1111 1111 0000 0000
= 0000 0001 0000 0000
(3)保留資料區的特定位
保留資料區的特定位。例如獲得整型數a=的第7-8位(從0開始)位的資料操作為: 110000000
321=0000 0001 0100 0001 & 384=0000 0001 1000 0000
=0000 0001 0000 0000
2. | 位或運算
1) 運算規則
位或運算的實質是將參與運算的兩個資料,按對應的二進位制數逐位進行邏輯或運算。例如:int型常量5和7進行位或運算的表示式為5|7,結果如下:5= 0000 0000 0000 0101
| 7= 0000 0000 0000 0111=0000 0000 0000 0111
2) 主要用途
(1) 設定一個數據的指定位。例如整型數a=321,將其低八位資料置為1的操作為a=a|0XFF。321= 0000 0001 0100 0001 | 0000 0000 1111 1111=0000 0000 1111 1111
邏輯運算子||與位或運算子|的區別
條件“或”運算子 (||) 執行 bool 運算元的邏輯“或”運算,但僅在必要時才計算第二個運算元。 x || y , x | y 不同的是,如果 x 為 true,則不計算 y(因為不論 y 為何值,“或”操作的結果都為 true)。這被稱作為“短路”計算。
3. ^ 位異或
1) 運算規則
位異或運算的實質是將參與運算的兩個資料,按對應的二進位制數逐位進行邏輯異或運算。只有當對應位的二進位制數互斥的時候,對應位的結果才為真。例如:int型常量5和7進行位異或運算的表示式為5^7,結果如下:5=0000 0000 0000 0101^7=0000 0000 0000 0111
= 0000 0000 0000 0010
2) 典型應用
(1)定位翻轉
定位翻轉:設定一個數據的指定位,將1換為0,0換為1。例如整型數a=321,,將其低八位資料進行翻位的操作為a=a^0XFF;
(2)數值交換
數值交換。例如a=3,b=4。在例11-1中,無須引入第三個變數,利用位運算即可實現資料交換。以下的操作可以實現a,b兩個資料的交換:
a=a^b;
b=b^a;
a=a^b;
4.~ 位非
位非運算的實質是將參與運算的兩個資料,按對應的二進位制數逐位進行邏輯非運算。
二.位移運算子
|