C語言 位運算

2021-09-11 03:10:22 字數 1761 閱讀 2910

什麼是位運算:

程式中的所有資料,在計算機記憶體中都以二進位制的形式儲存。所謂位運算就是直接對資料在記憶體中的二進位制位進行操作。

c語言中的位運算子有:

與(&),或(|),取反(~),異或(^),移位(<<  >>)以及組合運算子(&=   |=    ^=    >>=    <<=)。

一、位操作:

1、位與(&):

規則 :對應位均為 1 時才為 1,否則為 0。

用途:在某些位保持不變的情況下,將其餘位置 0。

2、位或(|)

規則 :對應位均為 0 時才為 0 ,否則為 1。

用途:在某些位保持不變的情況下,將其餘位置 1。

3、位取反(~)

規則 :各位翻轉,即原來為 1 的位變成 0,原來為 0 的置 1。

用途:間接地構造某個數,省卻計算的麻煩,以增強程式的可讀性。

4、位異或(^)

規則 :對應相同時 0 ,不同時則為 1。

用途 :相同者歸零,相異者或。在某些位保持不變的情況下,將其餘位取反。自身異或,清零。

5、左移( << )  

(移動位數為非負整數,且預設對 32 求餘)

規則 :使運算元的各位左移,低位補 0,高位溢位。

6、右移( >>)

(移動位數為非負整數,且預設對 32 求餘)

規則 :使運算元的各位右移,移出的低位捨棄。

高位:對無符號數和有符號中的正數補 0;

有符號數中的負數,取決於所使用的系統(補1)。

優先順序:

() > 成員運算 > (!) > 算術》 關係 > 邏輯 > 賦值 >  ,

() > 成員運算 > (^/!) >算術》 關係 > (>> <<)位邏輯(&|^) > 邏輯 > 賦值 > ,

二、掩碼(mask)

掩蓋掉一些東西,然後留下一些東西,就是掩碼存在的意義。

①  開啟位(位置 1)     flag |= mask;

②  關閉位(位置 0)      flag &= ~mask;

③  轉置位(位反轉)     flag ^= mask;

④  檢視某一位的值         if((flag&mask)==mask)

#include void dis32bin(int data)	        //列印二進位制

int main3() //一次關閉兩位

int main4() //位反轉

int main() //檢視某一位狀態

else

getchar();

return 0;

}

三、位操作應用:無參交換

要交換兩個變數的值,有兩類方法:

1、有參交換,引入新引數;

2、無參交換:位異或(天然具備已知任意兩個求第三個的性質)

#include //有參交換

void myswap1(int *p1, int *p2)

//較大數相加時,有溢位風險

void myswap2(int *p1, int *p2)

//無參交換:安全無溢位

void myswap3(int *p1, int *p2)

int main()

c語言位運算

c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 按位或 兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 是一元運算子,用來對乙個二進位制數按位取反,即將0變1...

C語言位運算

c語言位運算 位運算應用口訣 清零取反要用與,某位置一可用或 若要取反和交換,輕輕鬆鬆用異或 移位運算 1 它們都是雙目運算子,兩個運算分量都是整形,結果也是整形。2 am p 3 amp amp amp qu ot 右 移 右邊 的位被擠 掉。對於 左邊移出 的空位,如果是正 數則空位 補0,若 ...

C語言位運算

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...