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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值