第一次见这种定义方式

[复制链接]
407|6
手机看帖
扫描二维码
随时随地手机跟帖
hanwe|  楼主 | 2019-4-17 19:47 | 显示全部楼层 |阅读模式

#define bitset(var, bitno)   ((var) |= (1 << (bitno)))
#define bitclr(var, bitno)   ((var) &= ~(1 << (bitno)))
这个宏定义,是用来干什么的啊,有谁能给我解释一下,谢谢了!
union {
         struct {
            unsigned b0:1;
            unsigned b1:1;
            unsigned b2:1;
            unsigned b3:1;
            unsigned b4:1;
            unsigned b5:1;
            unsigned b6:1;
            unsigned b7:1;
            }oneBit;
           unsigned char allBits;
          } myFlag;
#define CNT2_1 myFlag.oneBit.b1
#define CNT2_2 myFlag.oneBit.b2
#define CNT2_3 myFlag.oneBit.b3
#define CNT2   myFlag .allBits
第一次见这种定义方式,知道有unsigned char unsigned int 这种unsigned b0.。。啥意思?

使用特权

评论回复
yufe| | 2019-4-17 19:51 | 显示全部楼层

前面两个名字写的很清楚,一个是设置一个字节中的一个BIT位的,一个是清除一个字节中的一个BIT位的,联合及结构是用来定义一个字节中的各个位的,这样定义后,好直接操作了。

使用特权

评论回复
hanwe|  楼主 | 2019-4-17 19:56 | 显示全部楼层
第一个问题我明白了。把后面的展开就是VAR=VAR||(0X01<<(bitno)) 和VAR=VAR&&(~(0X01<<(bitno))) 那个1的写法把我迷惑了,bitno的值只能取0-7。

使用特权

评论回复
hanwe|  楼主 | 2019-4-17 20:00 | 显示全部楼层
第二个问题还是有些不理解,unsigned b0:1 具体含义是什么呢?结构体和共用体的用法我都明白,只是放到单片机里的型式有些奇怪

使用特权

评论回复
hanwe|  楼主 | 2019-4-17 20:02 | 显示全部楼层

#define CNT2   myFlag .allBits,是不是定义了一个字节变量,#define CNT2_1 myFlag.oneBit. b1  CNT2_1 是只哪个字节的第一位呢?初始值是多少,是1吗?

使用特权

评论回复
yufe| | 2019-4-17 20:07 | 显示全部楼层
找个c语言的书看看啊,位域操作那一章,你就明白了

使用特权

评论回复
hanwe|  楼主 | 2019-4-17 20:10 | 显示全部楼层
好的, 多谢大家的建议

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

979

主题

8749

帖子

4

粉丝