C語言位掩碼

2022-08-26 07:00:12 字數 1780 閱讀 9772

在嵌入式程式設計的時候,比如對晶元的某個暫存器的某一位置位或清零,可以使用位掩碼

比如 reg是某個8位暫存器

1

/*將reg第5位置位

*/2 reg |= (1

<<5

); 34/*

將reg第2和6位置位

*/5 reg |= (1

<<2) |(1

<<6);

/*

將reg第5位清零

*/reg &= ~(1

<<5

); /*

將reg第2和6位清零

*/reg &= ~( (1

<<2) | (1

<<6) ) ;

其實上面的 1<< 5 就是0b000100000,,1<< 2 就是0b00000100 ,1<< 6 就是0b01000000

從而進一步使用巨集定義

#define bit2_mask 0b00000100

#define bit5_mask 0b00100000

#define bit6_mask 0b01000000

從而程式變為

/*

將reg第5位置位

*/reg |=bit5_mask; /*

將reg第2和6位置位,兩段**效果一樣

*/reg |= bit2_mask |bit6_mask;

reg |= bit2_mask +bit6_mask; /*

將reg第5位清零

*/reg &= ~bit5_mask;

/*將reg第2和6位清零,兩段**效果一樣

*/reg &= ~(bit2_mask |bit6_mask) ;

reg &= ~(bit2_mask + bit6_mask) ;

其中的bitx_mask就稱為位掩碼

掩碼還可以用於:

1.取出乙個變數/暫存器中特定位數的值(高位/低位)

/*

一般寫法

*//*

取出變數的高位和低位

*/uchar_var = 0x34

;uchar_var >>= 4;/*

取出變數的高位

*/uchar_var

<<= 4;/*

取出變數的低位

*/

/*

使用位掩碼

*//*

取出變數的高位和低位

*/#define h4_mask 0b11110000

#define l4_mask 0b00001111 uchar_var = 0x34

; uchar_var_l = uchar_var & l4_mask;/*

取出變數高位

*/uchar_var_h = (uchar_var & h4_mask) >> 4;/*

取出變數低位

*/

2.作為判斷條件

#define bit3_mask 0b00001000

#define bit2_mask 0b00000100

#define bit1_mask 0b00000010if( (uchar_var & bit3_mask) != 0 )/*

bit3是否置位

*/if( (uchar_var & bit2_mask) == 0 )/*

bit2是否清零

*/

C語言位域 位段

有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如開關只有通電和斷電兩種狀態,用0和1表示足以,也就是用乙個二進位。所以c語言又提供了一種資料結構,稱為位域或 位段。位域在應用開發中較少使用,你可以暫時跳過,遇到相關問題再回來溫習。所謂 位域 是把乙個位元組中的二進位...

C語言位域 位段

有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如開關只有通電和斷電兩種狀態,用0和1表示足以,也就是用乙個二進位。所以c語言又提供了一種資料結構,稱為位域或位段。位域在應用開發中較少使用,你可以暫時跳過,遇到相關問題再回來溫習。所謂 位域 是把乙個位元組中的二進位劃...

C語言位操作

在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用 位運算 來 完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。c語言提供了位運算的功 能,這使得c語言也能像組合語言一樣用來編寫系統程式。位運算子c語言提供了六種位運算...