衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言中必須要掌握的位運算操作

汽車電子技術 ? 來源:嵌入式之入坑筆記 ? 作者: 嵌入式之入坑筆記 ? 2023-02-10 14:19 ? 次閱讀

C語言中,特別是在嵌入式的開發中,位操作是很常用的一個知識點,涉及到按位(bit)操作的地方也是很常見的。本文分享一些C語言中的位操作運算的基礎內容。

1、位與操作( & )

首先必須要區分位與(&)和邏輯與(&&),這兩者之間看上去就是多一個少一個的區別,但是最終運算結果卻是完全不同的。位與 & 的真值表:

pYYBAGPl4VmAedXFAAANBNq5WBA876.png

從上表可以看出,位與 & 的運算原則是:只有當參與運算的兩個對象都是真(true 或 1)時,得到的運算結果才是 true 或 1 ,其它的都為flase 或 0。

位與 & 其實就是把參與運算的兩個數先分別轉換為二進制,然后再相與得到運算之后的結果,如下:

比如:0x01&0x03=0x01//運算如下:
0x01:0 0 0 1
0x03:0 0 1 1  
結果: 0 0 0 1

2、位或操作 ( | )

首先必須要區分位與(|)和邏輯與(||),這兩者之間看上去就是多一個少一個的區別,但是最終運算結果卻是完全不同的。位與 | 的真值表:

pYYBAGPl4WeAU8O9AAALyRcZCaI242.png

從上表可以看出,位與 | 的運算原則是:只要當參與運算的兩個對象中有一個是真(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、位異或操作( ^ )

位異或 ^ 的真值表:

pYYBAGPl4XeATPPQAAALgDXD2z0888.png

從上表可以看出,位異或 ^ 的運算原則是:當參與運算的兩個對象中有一個是真(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,超出數值范圍的部分則丟棄。如下:

poYBAGPl4YSAdsiIAAAfgPjHP7A547.png

6、位操作的實際運用

6.1、將特定位清零

如果想要把一個特定的數的某一個位清空(置零),使用位與 & 進行操作。比如:

pYYBAGPl4ZCAP9NTAAAjxJyHLHU136.png

6.2、將特定位置 1

如果想要把一個特定的數的某一個位清空(置零),使用位與 & 進行操作。比如:

poYBAGPl4ZqAPooeAAAjXd9ZosY196.png

6.3、特定位取反

如果想要把一個特定的數的某一個位取反,使用異或 ^ 進行操作。比如:

poYBAGPl4aeAGAssAAAfNQkHPzk279.png

注意:異或操作是相同為零,不同為1的運算原則!

6.4、獲取特定二進制位

如果想要獲取一個數中的某個或者某幾個特定的二進制位,可以參考如下操作:

pYYBAGPl4bGAGc4jAAAxd1IqoKI814.png
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5092

    文章

    19177

    瀏覽量

    307647
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137703
  • bit
    bit
    +關注

    關注

    0

    文章

    48

    瀏覽量

    32057
收藏 人收藏

    評論

    相關推薦

    C語言基礎知識(4)--運算

    C語言中運算符包括有算術運算符、關系運算符、邏輯運算符和
    的頭像 發表于 06-15 09:38 ?3927次閱讀

    C語言基礎(7)--運算

    程序中的所有數在計算機內存中都是以二進制的形式儲存的。運算就是直接對整數在內存中的二進制進行操作C
    的頭像 發表于 06-29 11:25 ?3299次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>基礎(7)--<b class='flag-5'>位</b><b class='flag-5'>運算</b>

    C語言中運算的使用技巧

    程序中的所有數在計算機內存中都是以二進制的形式儲存的。運算就是直接對整數在內存中的二進制進行操作
    發表于 08-10 09:17 ?504次閱讀

    C語言中賦值運算符詳解

    C語言中,賦值運算符用于將一個值賦給變量。
    發表于 08-18 16:38 ?2208次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>賦值<b class='flag-5'>運算</b>符詳解

    在單片機C語言中如何對變量的某一進行操作或賦值?

    在單片機C語言中如何對變量的某一進行操作或賦值?
    發表于 04-07 14:47

    單片機的C語言中操作用法

    單片機的C語言中操作用法
    發表于 08-17 15:04

    C語言的幾種操作運算

    在匯編語言中有直接對位進行操作的指令,如置、復位、取反、測試某一等,這對于硬件操作十分方便
    發表于 07-14 18:14

    C語言中三目運算符? :怎么使用?

    C語言中三目運算符? :怎么使用?
    發表于 11-02 09:23

    能不能在C語言中操作寄存器那樣直接操作一個字節的單獨一

    ?? 在C語言中通常操作只有真假兩種狀態的的數據時使用布爾bool變量比較多,如果需要同時觀察多個狀態,這時候選擇操作效率會更高,用一個字
    發表于 02-25 06:13

    C語言操作有哪幾種操作運算符呢

    C語言復習:一、操作:6種操作運算符二、define宏定義關鍵詞define是
    發表于 02-25 06:00

    C/C++語言運算詳解

    運算是指按二進制進行的運算。在系統軟件中,常常需要處理二進制的問題。C語言提供了6個
    發表于 12-14 16:36 ?4658次閱讀

    C語言運算+實例講解

    C語言運算有6種: &, | , ^(亦或), (右移)。 注意:參與運算的元素
    的頭像 發表于 03-22 16:00 ?8668次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>位</b><b class='flag-5'>運算</b>+實例講解

    C語言的幾種操作運算程序詳細說明

    在匯編語言中有直接對位進行操作的指令,如置、復位、取反、測試某一等,這對于硬件操作十分方便
    的頭像 發表于 07-18 12:00 ?3100次閱讀

    簡單介紹嵌入式C語言中常用的操作

    在嵌入式C語言中,使用操作程序有很好的可讀性。以下就簡單介紹以下常用的操作
    的頭像 發表于 02-23 10:36 ?1057次閱讀

    C語言中什么是關系運算

    C語言中,比較符稱為關系運算符,所謂關系運算就是比較運算,將兩個數值進行比較,判斷其比較的結果是否符合給的的條件。
    的頭像 發表于 03-09 10:47 ?2513次閱讀
    丽景湾百家乐官网的玩法技巧和规则| 百家乐最新首存优惠| 财神娱乐城信誉| 百家乐官网必赢法软件| 百家乐凯时娱乐网| 玩百家乐官网技巧看路| 百家乐官网百家乐官网伴侣 | 朝阳市| 百家乐视频游戏中心| 百家乐官网破解打法| 百家乐追注法| 澳门百家乐官网战法| 大发888大发888娱乐城| 鑫鼎百家乐官网的玩法技巧和规则 | 百家乐官网是否有路子| 百家乐楼梯缆| 宜阳县| 带百家乐的时时彩平台| 百家乐官网视频官网| 赌场百家乐怎么破解| 威尼斯人娱乐城易博lm0| 百家乐官网赌博机怎么玩| 百家乐筹码14克| 百家乐官网网上玩法| 大发888棋牌游戏下载| 24山亥山巳向造葬日课| 澳门金沙| 百家乐软件编辑原理| 百家乐官网算号软件| 百家乐一般的庄闲比例是多少| 百家乐官网真人游戏网上投注 | 百家乐电子发牌盒| 百家乐官网赌博详解| 澳门百家乐单注下限| 百家乐官网游戏合法吗| 综合百家乐博彩论坛| 嘉年华百家乐官网的玩法技巧和规则 | 百家乐代理商博彩e族| 百家乐官网15人桌子| 大发888挖掘| 百家乐博彩桌出租|