一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

汽車電子技術(shù) ? 來源:嵌入式之入坑筆記 ? 作者: 嵌入式之入坑筆記 ? 2023-02-10 14:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1、位與操作( & )

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

pYYBAGPl4VmAedXFAAANBNq5WBA876.png

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

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

比如:0x01&0x03=0x01//運算如下:
0x01:0 0 0 1
0x03:0 0 1 1  
結(jié)果: 0 0 0 1

2、位或操作 ( | )

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

pYYBAGPl4WeAU8O9AAALyRcZCaI242.png

從上表可以看出,位與 | 的運算原則是:只要當(dāng)參與運算的兩個對象中有一個是真(true 或 1)時,得到的運算結(jié)果就是 true 或 1 ,只有兩個都是 0 才為 flase 或 0。位與 | 其實就是把參與運算的兩個數(shù)先分別轉(zhuǎn)換為二進制,然后再相與得到運算之后的結(jié)果,如下:

比如:0x01 & 0x03 = 0x03   // 運算如下: 
0x01:0 0 0 1 
0x03:0 0 1 1
結(jié)果: 0 0 1 1

3、位取反操作(~)

位取反就是把十六進制數(shù)先轉(zhuǎn)換為二進制,然后把對應(yīng)的位取反(1 取反變?yōu)?0,0 取反變?yōu)?)。

比如:

比如:0x01 、 0x03  // 運算如下:
0x01:0 0 0 1        ~ 0x01:1 1 1 0   = 0x0D   

4、位異或操作( ^ )

位異或 ^ 的真值表:

pYYBAGPl4XeATPPQAAALgDXD2z0888.png

從上表可以看出,位異或 ^ 的運算原則是:當(dāng)參與運算的兩個對象中有一個是真(true 或 1)時,得到的運算結(jié)果就是 true 或 1 ;如果兩個都是 0 就為 flase 或 0;兩個都是 1 就為 flase 或 0。

總而言之就是:相同為0,不同為1。

比如:0x01 ^ 0x03 = 0x02   // 運算如下:
0x01:0 0 0 1
0x03:0 0 1 1
結(jié)果: 0 0 1 0 

5、位移操作(<< 、>>)

位移操作中,左移幾位就在右邊補幾個0,右移幾位就在左邊補幾個0,超出數(shù)值范圍的部分則丟棄。如下:

poYBAGPl4YSAdsiIAAAfgPjHP7A547.png

6、位操作的實際運用

6.1、將特定位清零

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

pYYBAGPl4ZCAP9NTAAAjxJyHLHU136.png

6.2、將特定位置 1

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

poYBAGPl4ZqAPooeAAAjXd9ZosY196.png

6.3、特定位取反

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

poYBAGPl4aeAGAssAAAfNQkHPzk279.png

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

6.4、獲取特定二進制位

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

pYYBAGPl4bGAGc4jAAAxd1IqoKI814.png
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5150

    文章

    19665

    瀏覽量

    317415
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141663
  • bit
    bit
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    32449
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

    C語言中運算符包括有算術(shù)運算符、關(guān)系運算符、邏輯運算符和
    的頭像 發(fā)表于 06-15 09:38 ?4920次閱讀

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

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

    C語言中運算的使用技巧

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

    C語言中賦值運算符詳解

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

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

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

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

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

    C語言的幾種操作運算

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

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

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

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

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

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

    C語言復(fù)習(xí):一、操作:6種操作運算符二、define宏定義關(guān)鍵詞define是
    發(fā)表于 02-25 06:00

    C/C++語言運算詳解

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

    C語言運算+實例講解

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

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

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

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

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

    C語言中什么是關(guān)系運算

    C語言中,比較符稱為關(guān)系運算符,所謂關(guān)系運算就是比較運算,將兩個數(shù)值進行比較,判斷其比較的結(jié)果是否符合給的的條件。
    的頭像 發(fā)表于 03-09 10:47 ?2848次閱讀