# 位操作 - [基本概念](#基本概念) - [功能说明](#功能说明) - [编程实例](#编程实例) - [实例描述](#实例描述) - [结果验证](#结果验证) ## 基本概念 位操作是指对二进制数的bit位进行操作。程序可以设置某一变量为状态字,状态字中的每一bit位(标志位)可以具有自定义的含义。 ## 功能说明 系统提供标志位的置1和清0操作,可以改变标志位的内容,同时还提供获取状态字中标志位为1的最高位和最低位的功能。用户也可以对系统的寄存器进行位操作。位操作模块为用户提供下面几种功能,接口详细信息可以查看API参考。 **表1** 位操作模块接口 | **功能分类** | **接口名称** | **描述** | | -------- | -------- | -------- | | 置1/清0标志位 | LOS_BitmapSet | 对状态字的某一标志位进行置1操作 | | | LOS_BitmapClr | 对状态字的某一标志位进行清0操作 | | 获取标志位为1的bit位 | LOS_HighBitGet | 获取状态字中为1的最高位 | | | LOS_LowBitGet | 获取状态字中为1的最低位 | | 连续bit位操作 | LOS_BitmapSetNBits | 对状态字的连续标志位进行置1操作 | | | LOS_BitmapClrNBits | 对状态字的连续标志位进行清0操作 | | | LOS_BitmapFfz | 获取从最低有效位开始的第一个0的bit位 | ## 编程实例 ### 实例描述 对数据实现位操作,本实例实现如下功能: 1. 某一标志位置1。 2. 获取标志位为1的最高bit位。 3. 某一标志位清0。 4. 获取标志位为1的最低bit位。 ``` #include "los_bitmap.h" #include "los_printf.h" static UINT32 BitSample(VOID) { UINT32 flag = 0x10101010; UINT16 pos; PRINTK("\nBitmap Sample!\n"); PRINTK("The flag is 0x%8x\n", flag); pos = 8; LOS_BitmapSet(&flag, pos); PRINTK("LOS_BitmapSet:\t pos : %d, the flag is 0x%0+8x\n", pos, flag); pos = LOS_HighBitGet(flag); PRINTK("LOS_HighBitGet:\t The highest one bit is %d, the flag is 0x%0+8x\n", pos, flag); LOS_BitmapClr(&flag, pos); PRINTK("LOS_BitmapClr:\t pos : %d, the flag is 0x%0+8x\n", pos, flag); pos = LOS_LowBitGet(flag); PRINTK("LOS_LowBitGet:\t The lowest one bit is %d, the flag is 0x%0+8x\n\n", pos, flag); return LOS_OK; } ``` ### 结果验证 编译运行得到的结果为: ``` Bitmap Sample! The flag is 0x10101010 LOS_BitmapSet: pos : 8, the flag is 0x10101110 LOS_HighBitGet:The highest one bit is 28, the flag is 0x10101110 LOS_BitmapClr: pos : 28, the flag is 0x00101110 LOS_LowBitGet: The lowest one bit is 4, the flag is 0x00101110 ```