1 按位運算符
1 按位邏輯運算符
按位取反 ~
按位與 &,賦值語句結合 &=
按位或 |,賦值語句結合 |=
按位異或 ^,賦值語句結合 ^=
2 設置位 flags |= MASK;
3 清除位 flags &= ~MASK;
4 翻轉位 flags ^= MASK;
5 檢查位的值 if ((flags & MASK) == MASK)
6 移位運算符
2 位字段(位域)
1 位域裏面用 int 或 unsigned int來定義,但並不是 int 的大小(4字節),而是實際使用的空間大小。如下面只使用4位,則位域大小爲1字節,即sizeof(prnt) = 1
2 填充位域的空洞
3 位域和聯合體 union 一起使用 MQTT爲例
下面是MQTT連接標誌字節說明(每一位,都有特定含義)
如下所示爲MQTT協議中的部分源碼:
// 位域和聯合體 union 一起使用
// 修改位域結構體標籤,最後通過 char 來讀出內容
typedef union
{
unsigned char all; /**< all connect flags */
struct
{
unsigned int : 1; /**< unused */
unsigned int cleansession : 1; /**< cleansession flag */
unsigned int will : 1; /**< will flag */
unsigned int willQoS : 2; /**< will QoS value */
unsigned int willRetain : 1; /**< will retain setting */
unsigned int password : 1; /**< 3.1 password */
unsigned int username : 1; /**< 3.1 user name */
} bits;
} MQTTConnectFlags; /**< connect flags byte */