打印

第一次见这种定义方式

[复制链接]
551|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huanghuac|  楼主 | 2018-1-28 14:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#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.。。啥意思?
沙发
huwr| | 2018-1-28 14:32 | 只看该作者
前面两个名字写的很清楚,一个是设置一个字节中的一个BIT位的,一个是清除一个字节中的一个BIT位的,联合及结构是用来定义一个字节中的各个位的,这样定义后,好直接操作了。

使用特权

评论回复
板凳
huanghuac|  楼主 | 2018-1-28 14:35 | 只看该作者
第一个问题我明白了。把后面的展开就是VAR=VAR||(0X01<<(bitno)) 和VAR=VAR&&(~(0X01<<(bitno))) 那个1的写法把我迷惑了,bitno的值只能取0-7。

使用特权

评论回复
地板
huanghuac|  楼主 | 2018-1-28 14:46 | 只看该作者

第二个问题还是有些不理解,unsigned b0:1 具体含义是什么呢?结构体和共用体的用法我都明白,只是放到单片机里的型式有些奇怪

使用特权

评论回复
5
huanghuac|  楼主 | 2018-1-28 14:49 | 只看该作者
#define CNT2   myFlag .allBits,是不是定义了一个字节变量,#define CNT2_1 myFlag.oneBit. b1  CNT2_1 是只哪个字节的第一位呢?初始值是多少,是1吗?

使用特权

评论回复
6
bqyj| | 2018-1-28 14:53 | 只看该作者

找个c语言的书看看啊,位域操作那一章,你就明白了

使用特权

评论回复
7
huanghuac|  楼主 | 2018-1-28 15:01 | 只看该作者

好的, 多谢大家的建议

使用特权

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

本版积分规则

772

主题

8473

帖子

6

粉丝