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

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

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

一文詳解嵌入式位運(yùn)算

CHANBAEK ? 來源:南山府嵌入式 ? 作者:編外人員 ? 2023-04-13 15:53 ? 次閱讀

敘述:

嵌入式位運(yùn)算是嵌入式系統(tǒng)中常用的優(yōu)化技巧之一,它可以通過位運(yùn)算操作來實(shí)現(xiàn)一些常見的數(shù)學(xué)運(yùn)算、邏輯運(yùn)算等,從而提高程序的執(zhí)行效率。

本文就這方面進(jìn)行介紹。

我個(gè)人認(rèn)為,位操作就是取、刪、反、移位、清空、切換等這些,但是在實(shí)際中因?yàn)閷?duì)這方面的理解不夠透徹,導(dǎo)致在寫代碼時(shí),不知道怎么操作。

位移運(yùn)算

位移運(yùn)算包括左移運(yùn)算和右移運(yùn)算,通過將二進(jìn)制數(shù)的位向左或向右移動(dòng)指定的位數(shù),可以實(shí)現(xiàn)快速的乘以或除以2的冪次方操作。 例如,將一個(gè)整數(shù)向左移動(dòng)3位,相當(dāng)于將其乘以2的3次方(即8),將一個(gè)整數(shù)向右移動(dòng)2位,相當(dāng)于將其除以2的2次方(即4)。

1int x = 10;  // 聲明一個(gè)整數(shù)變量 x,初始值為 10
2int y = x << 3;  // 將 x 左移 3 位,相當(dāng)于乘以 8
3int z = x >> 2;  // 將 x 右移 2 位,相當(dāng)于除以 4

位與運(yùn)算

位與運(yùn)算是對(duì)兩個(gè)數(shù)的每個(gè)二進(jìn)制位進(jìn)行邏輯與操作,如果兩個(gè)相應(yīng)的二進(jìn)制位都為1,則該位的結(jié)果為1,否則為0。 位與運(yùn)算常用于掩碼操作、判斷奇偶性等。

1int x = 0x0F;  // 聲明一個(gè)整數(shù)變量 x,初始值為 0x0F(二進(jìn)制為 0000 11112int y = 0x03;  // 聲明一個(gè)整數(shù)變量 y,初始值為 0x03(二進(jìn)制為 0000 00113int z = x & y;  // 對(duì) x 和 y 進(jìn)行位與運(yùn)算,結(jié)果為 0000 0011(十進(jìn)制為 3

位或運(yùn)算

位或運(yùn)算是對(duì)兩個(gè)數(shù)的每個(gè)二進(jìn)制位進(jìn)行邏輯或操作,如果兩個(gè)相應(yīng)的二進(jìn)制位中至少有一個(gè)為1,則該位的結(jié)果為1,否則為0。 位或運(yùn)算常用于設(shè)置標(biāo)志位、合并掩碼等。

1int x = 0x0F;  // 聲明一個(gè)整數(shù)變量 x,初始值為 0x0F(二進(jìn)制為 0000 11112int y = 0x03;  // 聲明一個(gè)整數(shù)變量 y,初始值為 0x03(二進(jìn)制為 0000 00113int z = x | y;  // 對(duì) x 和 y 進(jìn)行位或運(yùn)算,結(jié)果為 0000 1111(十進(jìn)制為 15

位異或運(yùn)算

位異或運(yùn)算是對(duì)兩個(gè)數(shù)的每個(gè)二進(jìn)制位進(jìn)行邏輯異或操作,如果兩個(gè)相應(yīng)的二進(jìn)制位不相同,則該位的結(jié)果為1,否則為0。 位異或運(yùn)算常用于取反標(biāo)志位、差分?jǐn)?shù)據(jù)傳輸?shù)取?/p>

1int x = 0x0F;  // 聲明一個(gè)整數(shù)變量 x,初始值為 0x0F(二進(jìn)制為 0000 11112int y = 0x03;  // 聲明一個(gè)整數(shù)變量 y,初始值為 0x03(二進(jìn)制為 0000 00113int z = x ^ y;  // 對(duì) x 和 y 進(jìn)行位異或運(yùn)算,結(jié)果為 0000 1100(十進(jìn)制為 12

位取反運(yùn)算

位取反運(yùn)算是對(duì)一個(gè)數(shù)的每個(gè)二進(jìn)制位進(jìn)行邏輯取反操作,即將1變?yōu)?,0變?yōu)?。 位取反運(yùn)算常用于反轉(zhuǎn)標(biāo)志位、取反掩碼等。

1int x = 0x0F;  // 聲明一個(gè)整數(shù)變量 x,初始值為 0x0F(二進(jìn)制為 0000 11112int y = ~x;  // 對(duì) x 進(jìn)行位取反運(yùn)算,結(jié)果為 1111 0000(十進(jìn)制為 -16

位域操作

位域是一種將一個(gè)或多個(gè)字段打包到一個(gè)單一的機(jī)器字中的數(shù)據(jù)結(jié)構(gòu)。 位域可以有效地壓縮存儲(chǔ)空間,并且可以提高程序的執(zhí)行效率。 位域常用于控制寄存器、狀態(tài)寄存器等。

1struct {
2    unsigned char a : 4;  // 定義一個(gè) 4 位的無符號(hào)整數(shù)字段 a
3    unsigned char b : 3;  // 定義一個(gè) 3 位的無符號(hào)整數(shù)字段 b
4    unsigned char c : 1;  // 定義一個(gè) 1 位的無符號(hào)整數(shù)字段 c
5} bitfield;
6
7bitfield.a = 5;  // 設(shè)置字段 a 的值為 5(二進(jìn)制為 01018bitfield.b = 2;  // 設(shè)置字段 b 的值為 2(二進(jìn)制為 0109bitfield.c = 1;  // 設(shè)置字段 c 的值為 1(二進(jìn)制為 1

清除位:

可以使用位運(yùn)算符將特定的位設(shè)置為0。 例如,如果需要清除一個(gè)8位字節(jié)的最高位,可以使用以下代碼:

1unsigned char byte = 0xFF;
2byte &= 0x7F; // Clear the highest bit

設(shè)置位:

可以使用位運(yùn)算符將特定的位設(shè)置為1。 例如,如果需要將一個(gè)8位字節(jié)的第4位設(shè)置為1,可以使用以下代碼:

1unsigned char byte = 0x00;
2byte |= 0x10; // Set the 4th bit

反轉(zhuǎn)位:

可以使用位運(yùn)算符將特定的位取反。 例如,如果需要反轉(zhuǎn)一個(gè)8位字節(jié)的所有位,可以使用以下代碼:

1unsigned char byte = 0x55;
2byte ^= 0xFF; // Invert all bits

檢查位:

可以使用位運(yùn)算符檢查特定的位是否設(shè)置為1或0。 例如,如果需要檢查一個(gè)8位字節(jié)的第2位是否為1,可以使用以下代碼:

1unsigned char byte = 0x04;
2if (byte & 0x02) {
3    // The 2nd bit is set
4} else {
5    // The 2nd bit is not set
6}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5088

    文章

    19159

    瀏覽量

    306509
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5359

    瀏覽量

    120818
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    41705
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4810

    瀏覽量

    68827
  • 位運(yùn)算
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    8444
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ARM嵌入式Linux系統(tǒng)開發(fā)詳解

    了Linux技術(shù)的*發(fā)展,全部采用當(dāng)前最流行和穩(wěn)定的Linux發(fā)行版或者相關(guān)工具,是Linux愛好者學(xué)習(xí)Linux的好幫手?!禠inux典藏大系:ARM嵌入式Linux系統(tǒng)開發(fā)詳解(第2版)》是獲得了
    發(fā)表于 09-14 08:57

    ARM嵌入式的GPIO綁定的計(jì)算方式詳解

    ARM嵌入式的GPIO綁定的計(jì)算方式詳解
    發(fā)表于 12-14 06:38

    嵌入式C語言運(yùn)算的相關(guān)資料推薦

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔@[TOC]嵌入式C語言的運(yùn)算、pandas是什么?1.與運(yùn)算“&” 按
    發(fā)表于 12-15 07:22

    運(yùn)算嵌入式編程制轉(zhuǎn)換

    程序員面試寶典筆記4-運(yùn)算嵌入式編程制轉(zhuǎn)換嵌入式編程static
    發(fā)表于 12-21 08:16

    嵌入式單片機(jī)開發(fā)中的常用運(yùn)算有哪些

    嵌入式單片機(jī)開發(fā)中的常用運(yùn)算有哪些?
    發(fā)表于 01-19 06:55

    嵌入式liunx開發(fā)技術(shù)詳解

    嵌入式liunx開發(fā)技術(shù)詳解主要內(nèi)容本書以嵌入式Linux 系統(tǒng)開發(fā)流程為主線,剖析了嵌入式Linux 系統(tǒng)構(gòu)建的各個(gè)環(huán)節(jié)。從嵌入式系統(tǒng)基礎(chǔ)
    發(fā)表于 03-04 16:58 ?55次下載

    嵌入式系統(tǒng)的知識(shí)平臺(tái)與平臺(tái)模式詳解

    嵌入式系統(tǒng)的知識(shí)平臺(tái)與平臺(tái)模式詳解 知識(shí)經(jīng)濟(jì)的時(shí)代是個(gè)以知識(shí)平臺(tái)為中心的市場(chǎng)經(jīng)濟(jì)時(shí)代。嵌入式系統(tǒng)領(lǐng)域的產(chǎn)業(yè)、科技,已從資本經(jīng)濟(jì)時(shí)代封閉
    發(fā)表于 03-29 15:09 ?935次閱讀

    嵌入式Linux內(nèi)核移植詳解(頂嵌)

    嵌入式內(nèi)核移植步驟詳解 含配置含義及內(nèi)容等方面
    發(fā)表于 11-20 16:00 ?19次下載

    基于嵌入式Linux應(yīng)用程序開發(fā)詳解

    基于嵌入式Linux應(yīng)用程序開發(fā)詳解
    發(fā)表于 10-25 14:17 ?12次下載
    基于<b class='flag-5'>嵌入式</b>Linux應(yīng)用程序開發(fā)<b class='flag-5'>詳解</b>

    詳解嵌入式linux 啟動(dòng)信息

    詳解嵌入式linux 啟動(dòng)信息
    發(fā)表于 10-30 10:28 ?11次下載
    <b class='flag-5'>詳解</b><b class='flag-5'>嵌入式</b>linux 啟動(dòng)信息

    單片機(jī)和嵌入式的關(guān)系讀懂

    其實(shí),嵌入式跟單片機(jī)真的沒有多大的聯(lián)系,想搞嵌入式的,就認(rèn)真學(xué)好大學(xué)課程。 (1)單片機(jī)   單片機(jī)基本結(jié)構(gòu)單片機(jī)由運(yùn)算器、控制器、存儲(chǔ)器、輸入輸出設(shè)備構(gòu)成。 (2)嵌入式  
    的頭像 發(fā)表于 11-20 13:57 ?7175次閱讀

    了解嵌入式

    嵌入式系統(tǒng)是種專用的計(jì)算機(jī)系統(tǒng),作為裝置或設(shè)備的部分。通常,嵌入式系統(tǒng)是個(gè)控制程序存儲(chǔ)在ROM中的
    發(fā)表于 02-12 09:33 ?5900次閱讀

    嵌入式詳解

    嵌入式詳解(stm32嵌入式開發(fā)實(shí)例)-嵌入式詳解,有需要的可以參考!
    發(fā)表于 07-30 16:07 ?64次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>詳解</b>

    (網(wǎng)盤)ARM嵌入式Linux系統(tǒng)開發(fā)詳解

    (網(wǎng)盤)ARM嵌入式Linux系統(tǒng)開發(fā)詳解(python嵌入式開發(fā) - csdn博客)-(網(wǎng)盤)ARM嵌入式Linux系統(tǒng)開發(fā)詳解,分享給大
    發(fā)表于 08-04 12:35 ?74次下載
    (網(wǎng)盤)ARM<b class='flag-5'>嵌入式</b>Linux系統(tǒng)開發(fā)<b class='flag-5'>詳解</b>

    嵌入式C之操作的應(yīng)用

    嵌入式運(yùn)算嵌入式系統(tǒng)中常用的優(yōu)化技巧之,它可以通過位運(yùn)算操作來實(shí)現(xiàn)
    發(fā)表于 05-20 16:52 ?749次閱讀