标志位的操作方法

标志位操作

在代码中,标志位很常见。它通过将一个额外的标志位附加到其他数据上,来表示一些状态信息。下面看看高位标志和低位标志两种方法的典型操作流程:

低位标志

/* 为数据添加低位标志 */
uint32_t data_flag = ((data << 1) | 0x01);
/* 获取低位标志 */
uint32_t flag = data_flag & 0x01;
/* 去掉低位还原数据 */
uint32_t data = data_flag >> 1;
  • 对任何位数的数据都适用,可在不知道数据的位数的情况下进行操作。
  • 对数据进行任何操作都需要先操作标志位。
  • 易被错误修改。

高位标志

/* 为数据添加高位标志 */
uint32_t data_flag = (data | (0x01 << 31)); 
/* 获取高位标志 */
uint32_t flag = (data_flag >> 31) & 0x01;
/* 去掉高位还原数据 */
uint32_t data = data_flag & 0x7FFFFFFF;
  • 标志位位于数据的高位,对数据操作时不需要先操作标志位。
  • 高标志位不易被错误修改。

当操作的数据类型为带符号整数(如int类型)时,高位标志存在另一种使用方法:

/* 为数据添加高位标志 */
int data_flag = -data;
/* 获取高位标志 */  
int flag = (data_flag < 0);
/* 去掉高位还原数据 */
int data = -data_flag;
  • 可以直接通过给数据添加负号来表示高位标志,这样既可以直接取得高位标志值,也兼具低位标志的通用性,对任意位数整形数据都适用。

总结:

使用无符号整数

  • 数据位数不确定时推荐使用低位标志。
  • 数据位数确定时使用高标志位。

使用带符号整型

  • 优先使用高标志位。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值