打印

这个宏定义是用来干什么的

[复制链接]
1229|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuhany|  楼主 | 2012-6-16 18:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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.。。啥意思?
沙发
jiahy| | 2012-6-16 18:59 | 只看该作者
前面两个名字写的很清楚,一个是设置一个字节中的一个BIT位的,一个是清除一个字节中的一个BIT位的,联合及结构是用来定义一个字节中的各个位的,这样定义后,好直接操作了。

使用特权

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

使用特权

评论回复
地板
wuhany|  楼主 | 2012-6-16 19:01 | 只看该作者
第二个问题还是有些不理解,unsigned b0:1 具体含义是什么呢?结构体和共用体的用法我都明白,只是放到单片机里的型式有些奇怪

使用特权

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

使用特权

评论回复
6
shimx| | 2012-6-16 19:03 | 只看该作者
找个c语言的书看看啊,位域操作那一章,你就明白了

使用特权

评论回复
7
wuhany|  楼主 | 2012-6-16 19:03 | 只看该作者
好的, 多谢大家的建议

使用特权

评论回复
8
wuhany|  楼主 | 2012-6-16 19:04 | 只看该作者
先结贴了

使用特权

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

本版积分规则

879

主题

10435

帖子

4

粉丝