实际开发的过程中才发现有时候某个模块的id就上百个,再写应用的时候就难免操作几个标志位。但是总不能建一堆uint8吧,本来内存也不大,(有些mcu里好像没有_BOOL,都是在头文件里typedef的uint8或者int)
然后网上看到有位数组操作宏这东西,也不用写一堆,没学好真是,现在才知道。
大概就是这样,
1.位数组定义()
#define maxnum 256
uint8_t array [((maxnum-1)>>3)+1];
点击查看代码- 每个uint8_t可以存储8个位
- 计算所需字节数的公式:((maxnum-1)>>3)+1
- maxnum-1 = 255
- 255 >> 3 = 31 (相当于除以8)
- 31 + 1 = 32
- 所以创建了一个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 |