C語言中,特別是在嵌入式的開發中,位操作是很常用的一個知識點,涉及到按位(bit)操作的地方也是很常見的。本文分享一些C語言中的位操作運算的基礎內容。
1、位與操作( & )
首先必須要區分位與(&)和邏輯與(&&),這兩者之間看上去就是多一個少一個的區別,但是最終運算結果卻是完全不同的。位與 & 的真值表:
從上表可以看出,位與 & 的運算原則是:只有當參與運算的兩個對象都是真(true 或 1)時,得到的運算結果才是 true 或 1 ,其它的都為flase 或 0。
位與 & 其實就是把參與運算的兩個數先分別轉換為二進制,然后再相與得到運算之后的結果,如下:
比如:0x01&0x03=0x01//運算如下:
0x01:0 0 0 1
0x03:0 0 1 1
結果: 0 0 0 1
2、位或操作 ( | )
首先必須要區分位與(|)和邏輯與(||),這兩者之間看上去就是多一個少一個的區別,但是最終運算結果卻是完全不同的。位與 | 的真值表:
從上表可以看出,位與 | 的運算原則是:只要當參與運算的兩個對象中有一個是真(true 或 1)時,得到的運算結果就是 true 或 1 ,只有兩個都是 0 才為 flase 或 0。位與 | 其實就是把參與運算的兩個數先分別轉換為二進制,然后再相與得到運算之后的結果,如下:
比如:0x01 & 0x03 = 0x03 // 運算如下:
0x01:0 0 0 1
0x03:0 0 1 1
結果: 0 0 1 1
3、位取反操作(~)
位取反就是把十六進制數先轉換為二進制,然后把對應的位取反(1 取反變為 0,0 取反變為1)。
比如:
比如:0x01 、 0x03 // 運算如下:
0x01:0 0 0 1 ~ 0x01:1 1 1 0 = 0x0D
4、位異或操作( ^ )
位異或 ^ 的真值表:
從上表可以看出,位異或 ^ 的運算原則是:當參與運算的兩個對象中有一個是真(true 或 1)時,得到的運算結果就是 true 或 1 ;如果兩個都是 0 就為 flase 或 0;兩個都是 1 就為 flase 或 0。
總而言之就是:相同為0,不同為1。
比如:0x01 ^ 0x03 = 0x02 // 運算如下:
0x01:0 0 0 1
0x03:0 0 1 1
結果: 0 0 1 0
5、位移操作(<< 、>>)
位移操作中,左移幾位就在右邊補幾個0,右移幾位就在左邊補幾個0,超出數值范圍的部分則丟棄。如下:
6、位操作的實際運用
6.1、將特定位清零
如果想要把一個特定的數的某一個位清空(置零),使用位與 & 進行操作。比如:
6.2、將特定位置 1
如果想要把一個特定的數的某一個位清空(置零),使用位與 & 進行操作。比如:
6.3、特定位取反
如果想要把一個特定的數的某一個位取反,使用異或 ^ 進行操作。比如:
注意:異或操作是相同為零,不同為1的運算原則!
6.4、獲取特定二進制位
如果想要獲取一個數中的某個或者某幾個特定的二進制位,可以參考如下操作:
-
嵌入式
+關注
關注
5082文章
19104瀏覽量
304797 -
C語言
+關注
關注
180文章
7604瀏覽量
136685 -
bit
+關注
關注
0文章
48瀏覽量
32011
發布評論請先 登錄
相關推薦
評論