stm32庫函數編程位操作總結

所謂位運算,就是對一個比特(Bit)位進行操作。在《數據在內存中的存儲》一節中講到,比特(Bit)是一個電子元器件,8個比特構成一個字節(Byte),它已經是粒度最小的可操作單元了。
C語言提供了六種運算符

運算符 & | ^ ~ << >>
說明 按位與 按位或 按位異或 取反 左移 右移

左移運算(<<)

左移運算符<<用來把操作數的各個二進制位全部左移若干位,高位丟棄,低位補0。

右移運算(>>)

右移運算符>>用來把操作數的各個二進制位全部右移若干位,低位丟棄,高位補 0 或 1。如果數據的最高位是 0,那麼就補 0; 如果最高位是 1,那麼就補 1。

stm32庫函數編程常用的位操作

1)把變量的某位清零。

```c
1 //定義一個變量 a = 1001 1111 b (二進制數)
2 unsigned char a = 0x9f;
3 
4 //對 bit2 清零
5 
6 a &= ~(1<<2);
7 
8 //括號中的 1 左移兩位,(1<<2)得二進制數:0000 0100 b
9 //按位取反,~(1<<2)得 1111 1011 b
10 //假如 a 中原來的值爲二進制數: a = 1001 1111 b
11 //所得的數與 a 作”位與&”運算,a = (1001 1111 b)&(1111 1011 b),
12 //經過運算後,a 的值 a=1001 1011 b
13 // a 的 bit2 位被被零,而其它位不變

2) 把變量的某幾個連續位清零

1 
2 //若把 a 中的二進制位分成 2 個一組
3 //即 bit0、bit1 爲第 0 組,bit2、bit3 爲第 1 組,
4 // bit4、bit5 爲第 2 組,bit6、bit7 爲第 3 組
5 //要對第 1 組的 bit2、bit3 清零
6 
7 a &= ~(3<<2*1);
8 
9 //括號中的 3 左移兩位,(3<<2*1)得二進制數:0000 1100 b
10 //按位取反,~(3<<2*1)得 1111 0011 b
11 //假如 a 中原來的值爲二進制數: a = 1001 1111 b
12 //所得的數與 a 作”位與&”運算,a = (1001 1111 b)&(1111 0011 b),
13 //經過運算後,a 的值 a=1001 0011 b
14 // a 的第 1 組的 bit2、bit3 被清零,而其它位不變。
15 
16 //上述(~(3<<2*1))中的(1)即爲組編號;如清零第 3 組 bit6、bit7 此處應爲 3
17 //括號中的(2)爲每組的位數,每組有 2 個二進制位;若分成 4 個一組,此處即爲 4
18 //括號中的(3)是組內所有位都爲 1 時的值;若分成 4 個一組,此處即爲二進制數“1111 b”
19 
20 //例如對第 2 組 bit4、bit5 清零
21 a &= ~(3<<2*2);

3)對變量的某幾位進行賦值。

1 //a = 1000 0011 b
2 //此時對清零後的第 2 組 bit4、bit5 設置成二進制數“01 b ”
3 
4 a |= (1<<2*2);
5 //a = 1001 0011 b,成功設置了第 2 組的值,其它組不變
  

4)對變量的某位取反

1 //a = 1001 0011 b
2 //把 bit6 取反,其它位不變
3 
4 a ^=(1<<6);
5 //a = 1101 0011 b

與0異或不變,與1異或取反。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章