c primer plus 專題15:位操作

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 */

 

 

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