位運算,就是對乙個位元(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,則該位...