C語言 位運算

2021-09-24 21:31:11 字數 1935 閱讀 9135

位運算,就是對乙個位元(bit)位進行操作;

c語言提供了六種位運算子:

除了取反運算子,其餘均為雙目運算子;

運算量只能是整型或者字元型資料,不能為實型資料;

作用:1、按位與運算通常用來對某些位清 0,或者保留某些位;

例如要把 n 的高 16 位清 0 ,保留低 16 位,可以進行n & 0xffff運算(0xffff 在記憶體中的儲存形式為 0000 0000 – 0000 0000 – 1111 1111 – 1111 1111)。

2、取乙個數中的某些位;

3、要想將哪一位保留下來,就與乙個數進行&運算,次數在該位取1;

作用:1、按位或運算可以用來將某些位置 1,或者保留某些位;

參與^運算兩個二進位制位不同時,結果為 1,相同時結果為 0(不同為1)

作用:1、按位異或運算可以用來將某些二進位制位反轉;

例如要把 n 的高 16 位反轉,保留低 16 位,可以進行n ^ 0xffff0000運算(0xffff0000 在記憶體中的儲存形式為 1111 1111 – 1111 1111 – 0000 0000 – 0000 0000)。

2、與0進行異或保留原值;

3、交換兩個值,不用臨時變數;

取反運算子~為單目運算子,右結合性,作用是對參與運算的二進位制位取反。

左移運算子《用來把運算元的各個二進位制位全部左移若干位,高位丟棄,低位補0

如果資料較小,被丟棄的高位不包含 1,那麼左移 n 位相當於乘以 2 的 n 次方

算術左移和邏輯左移一樣都是右邊補0

右移運算子》用來把運算元的各個二進位制位全部右移若干位,低位丟棄,高位補 0 或 1。

如果無符號數,補0;

有符號數可能補1,也可能補0,若最高位為0,則補0,若最高位為1,則可能補0也可能補1,由系統決定,分為兩種情況:

1、算數右移

補1,即帶著符號位一起右移

2、邏輯右移

補0如果被丟棄的低位不包含 1,那麼右移 n 位相當於除以 2 的 n 次方(但被移除的位中經常會包含 1)。

比如:a為short , b為int

系統會將二者按右端對齊,如果a為正數,則左側16位補滿0;若a為負數,左端應補滿1;如果a為無符號整數型,則左端填滿0;

c語言允許在乙個結構體中以位為單位來指定其成員所佔記憶體長度,這種以位為單位的成員稱為位段位域,如下:

struct bs
c語言標準規定,位域的寬度不能超過它所依附的資料型別的長度。通俗地講,成員變數都是有型別的,這個型別限制了成員變數的最大長度,:後面的數字不能超過這個長度。

c語言標準規定,只有有限的幾種資料型別可以用於位域。在 ansi c 中,這幾種資料型別是 int、signed int 和 unsigned int(int 預設就是 signed int);到了 c99,_bool 也被支援了。

位段要從另乙個儲存單元開始,可以用如下形式:

int a:1;

int b:2;

int0

;//本儲存單元不再存放資料

int c:

3//在另一儲存單元存放

上述 int 0;為乙個無名位段,無名位域一般用來作填充或者調整成員位置。因為沒有名稱,無名位域不能使用。

位域有利於減少儲存空間。

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,則該位...