嵌入式 位 bit 操作

2021-06-26 10:11:26 字數 1246 閱讀 8365

嵌入式系統總是要使用者對變數或暫存器進行位操作。給定乙個整型變數

a,寫兩段**,第乙個設定a的

bit 3

,第二個清除a 的

bit 3

。在以上兩個操作中,要保持其它位不變。

對這個問題有三種基本的反應:

1)不知道如何下手。該被面者從沒做過任何嵌入式系統的工作。

2) 用

bit fields

。bit fields

是被扔到

c語言死角的東西,它保證你的**在不同編譯器之間是不可移植的,同時也保證了的你的**是不可重用的。

3) 用#defines 

和bit masks 

操作。這是乙個有極高可移植性的方法,是應該被用到的方法。

最佳的解決方案如下:

#define bit3 (0x1 << 3) 

(採用巨集將數字定義為有意義的

bit3

,明確,不易出錯,改起來方便)

static int a;

void set_bit3(void)

void clear_bit3(void)

一些人喜歡為設定和清除值而定義乙個掩碼(待操作位全

1,其餘位全

0的數,對於某個意義靠多位同時表示的最好帶上掩碼,隔離其他位的影響)

同時定義一些說明常數,這也是可以接受的。

我希望看到幾個要點:說明常數、|=和

&=~操作,先取反再

&是對某位清

0的最好操作

。考點:

在嵌入式系統中,時刻要關注移植性,

具體的程式中不要出現具體的數字

,這些數字都應該

define

成某個有意義的符號,可讀性可移植性都很強,比如

#define bit(x) (0x1 << (x))

x作為引數可以很方便的對任意位進行操作,意義明確,更改替換方便.

1.編寫乙個c語言函式,該函式給出乙個位元組中被置1的位的個數。

方法1:

#include

#define bit(i) (0x01<

int test(char log)

}return num;

}void main()

方法2:

#include

#define bit(i) (0x01<

int test(char log)

}return num;

}void main()

嵌入式程式設計 c位操作

在學習c語言位操作前需要具備十六進製制和二進位制的知識以及從二進位制與十六進製制的相互轉換,相應的教程請移步新增鏈結描述 現在掌握了十六進製制和二進位制之間的相互轉換知識,我們可以從c中的按位 或位級別 運算開始。基本上有6種型別的按位運算子。這些是 1.以 表示 或 運算子 2.以 表示 與 運算...

嵌入式開發 按位取反操作

按位取反,這個實際用到一些計算式知識,你得先清楚原碼 反碼 補碼這幾個概念。首先我們要知道 計算機底層的儲存方式 所有資料都是以二進位制形式存在的。二進位制資料的儲存方式 所有的數值,不論正負,都是以補碼方式儲存的 因為計算機只會加不會減,所以有了補碼的形式 二進位制是機器語言,1 0表示高低電頻,...

32位嵌入式系統和嵌入式Linux

32位嵌入式系統和嵌入式linux 嵌入式linux是一種開發原始碼 軟實時 多工的嵌入式作業系統,是標準linux的嵌入式系統移植版。眾所周知,linux能在pc中可靠地執行,正是因為當前的pc硬體已經全部採用了32位乃至64位系統,才會給象windows linux unix這些32位作業系統提...