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

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

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

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

C語(yǔ)言中必須要掌握的位運(yùn)算操作

汽車(chē)電子技術(shù) ? 來(lái)源:嵌入式之入坑筆記 ? 作者: 嵌入式之入坑筆記 ? 2023-02-10 14:19 ? 次閱讀

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

1、位與操作( & )

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

pYYBAGPl4VmAedXFAAANBNq5WBA876.png

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

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

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

2、位或操作 ( | )

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

pYYBAGPl4WeAU8O9AAALyRcZCaI242.png

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

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

3、位取反操作(~)

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

比如:

比如:0x01 、 0x03  // 運(yùn)算如下:
0x01:0 0 0 1        ~ 0x01:1 1 1 0   = 0x0D   

4、位異或操作( ^ )

位異或 ^ 的真值表:

pYYBAGPl4XeATPPQAAALgDXD2z0888.png

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

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

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

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

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

poYBAGPl4YSAdsiIAAAfgPjHP7A547.png

6、位操作的實(shí)際運(yùn)用

6.1、將特定位清零

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

pYYBAGPl4ZCAP9NTAAAjxJyHLHU136.png

6.2、將特定位置 1

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

poYBAGPl4ZqAPooeAAAjXd9ZosY196.png

6.3、特定位取反

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

poYBAGPl4aeAGAssAAAfNQkHPzk279.png

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

6.4、獲取特定二進(jìn)制位

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

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

    關(guān)注

    5125

    文章

    19438

    瀏覽量

    313070
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7628

    瀏覽量

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

    關(guān)注

    0

    文章

    48

    瀏覽量

    32291
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言基礎(chǔ)知識(shí)(4)--運(yùn)算

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

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

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

    C語(yǔ)言中運(yùn)算的使用技巧

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

    C語(yǔ)言中賦值運(yùn)算符詳解

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

    在單片機(jī)C語(yǔ)言中如何對(duì)變量的某一進(jìn)行操作或賦值?

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

    單片機(jī)的C語(yǔ)言中操作用法

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

    C語(yǔ)言的幾種操作運(yùn)算

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

    C語(yǔ)言中三目運(yùn)算符? :怎么使用?

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

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

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

    C語(yǔ)言操作有哪幾種操作運(yùn)算符呢

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

    C/C++語(yǔ)言運(yùn)算詳解

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

    C語(yǔ)言運(yùn)算+實(shí)例講解

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

    C語(yǔ)言的幾種操作運(yùn)算程序詳細(xì)說(shuō)明

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

    簡(jiǎn)單介紹嵌入式C語(yǔ)言中常用的操作

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

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

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