按位取反:~
按位或:|
按位或:^
移位運算子:
二、位欄位
4個按位邏輯運算子都用於整數資料,包括char 。之所以叫做按位運算,是因為這些操作都是針對每乙個位進行的。不影響它左右兩邊的位。不能混淆於邏輯運算子(&& 、 || 和 !)
(
10010011)&
(00111101
)//表示式
(00010001
)//結果值
用法:掩碼
所謂掩碼指的是一些設定為開(1)或者關(0)的組合位。例如:假設定義符號常量mask為2(即,二進位制為:00000010
)
flags = flags & mask;
//等價於flags &= mask
//00000010 = 10010010 & 00000010
像這樣的過程除了mask中的一位為1以外其他的數都是0,我們就稱為「使用掩碼
」
~
(10011010
)//表示式
(01100101
)//結果值
用法:清空位(設定為0)
1.清空位就是在不影響其它位的情況下關閉指定的某一位。
2.例如:假設flags是00001111,mask是10110110,利用且取反運算flags00001111
& ~ mask10110110
結果為:10111111
其中mask為1的位在結果中都被設定(清空)為0,flags中與mask為0的位相應的位在結果中都為改變。。簡化運算**為:flags &=~ mask
(
10010011)|
(00111101
)//表示式
(10111111
)//結果值
用法:置位(設定為1)
1.置位就是只開啟需要的特定位,同時保持其它位不變。
2.例如:假設flags是00001111,mask是10110110,利用或運算的flags00001111
| mask10110110
結果為:10111111
其中mask為1的位,flags與其對應的位也為1。mask中為0的位,flags與其對應的位保持不變。簡化運算**為:flags =| mask
(
10010011)^
(00111101
)//表示式
(10101110
)//結果值
int stonk =1;
int onkoo;
onkoo = stonk <<=2;
//把 4 賦給onkoo;
stonk <<=2;
//把stonk的值改為 4
int sweet =16;
int ooosw;
ooosw = sweet >>3;
//ooosw = 2,sweet的值仍然為16
sweet >>=3;
//sweet的值為2
移位用法總結:
number << n number乘以2的n次冪
number >> n 如果number為非負數,則用number除以2的n次冪
在c語言中用兩種訪問位的方法,除了上面的通過按位運算子外,還有一種就是在結構中創造位欄位。位字段的結構體格式是在結構體中加入: 表示。
例如:宣告建立乙個 4 個 1 位的字段
struct
prnt;
根據該宣告可以看出,我們平常使用結構是按型別的位元組對齊。但是通過: 新增在結構體裡面,我們可以控制位欄位。同時還可以通過普通的結構成員運算子.來給這些字段賦值:
prnt.a =0;
prnt b =
1;
但是要確保所賦的值不超過欄位的可容納範圍。
例如下面的結構體欄位
/*這裡,在stuff,fiel_1和stuff.fiel_2之間,有乙個2位的空隙;
*stuff.fiel_3將儲存在下乙個unsigned int 中 */
struct
stuff;
如果宣告的總位數超過了乙個unsigned int 型別的大小,則會用到下乙個unsigned int 的型別儲存位置。乙個欄位不允許跨越兩個unsigned int 之間的邊界。編譯器後自動移動跨界的字段,保持unsigned int 的邊界對稱。一旦發生這種情況,第乙個unsigned int 中會留下乙個未命名的「洞」
。
即上面的**就是使用未命名的字寬度「填充」
未命名的「洞」
。使用乙個寬度為0的未命名字段迫使下乙個欄位與下乙個整數對齊。
C語言常用基礎位操作
1 使用下面的 將最右邊的1改變為0,假如沒有1則結果為0 e.g.01011000 01010000 x x 1 此 可以用來判斷乙個無符號的整數是否為2的冪,假如x x 1 1,則x為2的冪,否則x不為2的冪 2 相似地,下面的 可以用來判斷乙個無符號的整數是否具備2n 1的格式 包括n 0 1...
C 位操作基礎
運算子 含義按位反 按位與按位或 按位異或 左移右移 1 按位反 一元運算子,逐位取反,產生二進位制反碼 例 10010001 01101110 2 按位與 二元運算子,逐位比較,都真才真 1 1 1 例 10010001 00110000 00010000 3 按位或 二元運算子,逐位比較,有真即...
C語言位操作
在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來 完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功 能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種位運算...