溧久苟 发表于 2025-8-28 16:42:10

位数组操作宏

实际开发的过程中才发现有时候某个模块的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 & (0x01 0)
点击查看代码id_bit >> 0x03:计算字节索引(相当于除以8)id_bit & 0x07:计算位在字节中的偏移(相当于对8取模)0x01 > 0x03] |= (0x01 > 0x03] &=(~ (0x01 > 0x03] |= (0x01

荆邦 发表于 2025-10-14 12:35:38

懂技术并乐意极积无私分享的人越来越少。珍惜

路逸思 发表于 2025-10-23 00:30:12

这个有用。

汤流婉 发表于 2025-11-3 23:05:21

不错,里面软件多更新就更好了

丘奕奕 发表于 2025-11-27 08:37:39

不错,里面软件多更新就更好了

染罕习 发表于 2025-11-29 18:03:34

谢谢楼主提供!

沃盼盼 发表于 4 天前

谢谢分享,辛苦了

肿抢 发表于 昨天 03:39

这个好,看起来很实用

圄旧剖 发表于 8 小时前

感谢分享
页: [1]
查看完整版本: 位数组操作宏