打印
[复制链接]
2927|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nemogg|  楼主 | 2014-1-5 23:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C不允许定义 bit 的数组,但是我又希望可以用FOR的语句去循环处理BIT的变量,有什么办法呢?谢谢。
沙发
xyz549040622| | 2014-1-6 00:05 | 只看该作者
定位为char类型的,只是取0,1值即可

使用特权

评论回复
板凳
nemogg|  楼主 | 2014-1-7 10:32 | 只看该作者
xyz549040622 发表于 2014-1-6 00:05
定位为char类型的,只是取0,1值即可

这样比较浪费内存呀。。

使用特权

评论回复
地板
nemogg|  楼主 | 2014-1-7 11:52 | 只看该作者
xyz549040622 发表于 2014-1-7 11:21
叶公这么定义如何循环呀

:dizzy:我也在想这个问题

使用特权

评论回复
5
NE5532| | 2014-1-7 12:54 | 只看该作者
nemogg 发表于 2014-1-7 11:52
我也在想这个问题

楼主你想循环神马东西?为变量就是一个bit,只有0和1两种状态,肿马循环??

使用特权

评论回复
6
zhimagod| | 2014-1-7 13:08 | 只看该作者
弄个临时变量,然后复制,然后移位……
需要的话再把临时变量里的值复制回去

使用特权

评论回复
7
kz_zank| | 2014-1-7 13:16 | 只看该作者
假如 有8个bit的状态  定义一个unsigned char作为标志
unsigned char system_flag;
void abc(void)
{
unsigned char i;
bit bit_i;
for (i=0 ; i<8;i++)
{
        
        unsigned char sysflag;
        sysflag = system_flag;
        bit_i = sysflag&0x0001;//取得最低位状态
        sysflag = sysflag >> 1;//集体右移一位
}
}
bit_i 这个是当前循环的状态标志位  

使用特权

评论回复
8
nemogg|  楼主 | 2014-1-7 14:20 | 只看该作者
kz_zank 发表于 2014-1-7 13:16
假如 有8个bit的状态  定义一个unsigned char作为标志
unsigned char system_flag;
void abc(void)

其实我也想过类似的方法,但是感觉效率不高,如果可以在循环直接通过i来访问8位中的一位这样效率是不是会高点(就像访问数组那样)。。。。。而且我还希望有需要的时候可以8位一起处理,类似PIC端口访问的方式。

我是不是想太多了。。。其实这样也不是太低效。:lol

使用特权

评论回复
9
nemogg|  楼主 | 2014-1-7 14:42 | 只看该作者
NE5532 发表于 2014-1-7 12:54
楼主你想循环神马东西?为变量就是一个bit,只有0和1两种状态,肿马循环?? ...

我需要循环访问不同的BIT,而且这些BIT在同一个字节里,有需要的时候又可以一起处理。就累世PIC端口访问那样。

使用特权

评论回复
10
lnulibin| | 2014-1-7 15:13 | 只看该作者
学习了。

使用特权

评论回复
11
NE5532| | 2014-1-7 15:34 | 只看该作者
nemogg 发表于 2014-1-7 14:42
我需要循环访问不同的BIT,而且这些BIT在同一个字节里,有需要的时候又可以一起处理。就累世PIC端口访问 ...

你用伪代码写个想法出来吧,小伙伴们表示看不懂啊。

使用特权

评论回复
12
yewuyi| | 2014-1-7 15:38 | 只看该作者
循环啥?位变量直接if,else了。。。

使用特权

评论回复
13
NE5532| | 2014-1-7 17:02 | 只看该作者
unsigned char i = 0x01;
unsigned char j;

for (j = 0; j < 8 ; j++)
{
  if (sysflag&i == i)
   do something;
else
   do others;

i<<=1;
}

根据情况,还可以简化的。

使用特权

评论回复
14
NE5532| | 2014-1-7 17:04 | 只看该作者
如果16个处理语句互不相同,直接用&的方法把需要的位取出来就可以了,不必用i作循环,直线程序效率反而高。

使用特权

评论回复
15
nemogg|  楼主 | 2014-1-7 20:33 | 只看该作者
NE5532 发表于 2014-1-7 17:04
如果16个处理语句互不相同,直接用&的方法把需要的位取出来就可以了,不必用i作循环,直线程序效率反而高。 ...

学习了,谢谢。
是,如果语句不一样,想来想去都只要直线程序了。

使用特权

评论回复
16
ayb_ice| | 2014-1-8 11:29 | 只看该作者
PICC是可以定义bit的

使用特权

评论回复
17
zhaozhij316| | 2014-7-17 01:14 | 只看该作者
学写了1

使用特权

评论回复
18
xlsf1048| | 2014-7-29 10:00 | 只看该作者
学习!

使用特权

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

本版积分规则

7

主题

48

帖子

0

粉丝