找回密码
 立即注册
首页 业界区 安全 位数组操作宏

位数组操作宏

溧久苟 4 小时前
实际开发的过程中才发现有时候某个模块的id就上百个,再写应用的时候就难免操作几个标志位。但是总不能建一堆uint8吧,本来内存也不大,(有些mcu里好像没有_BOOL,都是在头文件里typedef的uint8或者int)
然后网上看到有位数组操作宏这东西,也不用写一堆,没学好真是,现在才知道。
1.png

大概就是这样,
1.位数组定义()
#define maxnum 256
uint8_t array [((maxnum-1)>>3)+1];
点击查看代码
  1. 每个uint8_t可以存储8个位
  2. 计算所需字节数的公式:((maxnum-1)>>3)+1
  3. maxnum-1 = 255
  4. 255 >> 3 = 31 (相当于除以8)
  5. 31 + 1 = 32
  6. 所以创建了一个32字节的数组,正好可以存储256位(32×8=256)
复制代码
2.位操作宏
//测试
#define TSTBIT(datas, id_bit)   ((datas[id_bit >> 0x03] & (0x01 0)
点击查看代码[code]id_bit >> 0x03:计算字节索引(相当于除以8)id_bit & 0x07:计算位在字节中的偏移(相当于对8取模)0x01 > 0x03] |= (0x01 > 0x03] &=(~ (0x01 > 0x03] |= (0x01
您需要登录后才可以回帖 登录 | 立即注册