打印

我怎么做才最简单

[复制链接]
977|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dingy|  楼主 | 2012-4-8 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做了一个测试的板子,要求对输入信号测试。以0表示合格,1表示不合格。一共有32个信号,连续测试1000次,只要有一次出现1就判断该信号不合格。我在开始时定义4个变量,假设A,B,C,D.将第一次测试的就诶过分别赋值给A,B,C,D。然后进行第二次测试,将结果分别与A,B,C,D求或再赋值给A,B,C,D。这样第N+1次的测试结果都与前N次求或过的值再求或。一直到1000次结束。最后我再来判断这四个变量里有多少个1,并且将1对应的序号显示出来。比如A对应的8位分别是1—8。请问大虾们,我怎么做才最简单?
沙发
pengf| | 2012-4-8 16:19 | 只看该作者
将A先跟0X01求与,判断是否是1

使用特权

评论回复
板凳
dingy|  楼主 | 2012-4-8 16:20 | 只看该作者
谢谢,最好是有简单的程序提示。

使用特权

评论回复
地板
renyaq| | 2012-4-8 16:21 | 只看该作者
可以考虑用移位来做,移位一次判断一下

if(A&0x80)
...
A=A<<1;
来判断最高位是不是为1

使用特权

评论回复
5
supernan| | 2012-4-8 16:22 | 只看该作者
假如结果存在数组A [4]中;

for (k = 0; k < 1000; k++)
{
       for (i=0; i<4; i++ )
       {
               for (j=0; j<8; j++)
               {
                       result = Signal_Test(k, 8*i+j); // result = 0 or 1. 第k次, 第8*i+j个信号测试结果
                       result <<= (7-j);
                       A |= result;
               }
       }
}

for (i=0; i<4; i++)
{
       for (j=0; j<8; j++)
      {
             if (A & 0x80)
             {
                  printf("The signal %d test failed.\n", i*8 + j);
             }
             A <<= 1;
      }
}

使用特权

评论回复
6
dingy|  楼主 | 2012-4-8 16:22 | 只看该作者
多谢楼上兄弟

使用特权

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

本版积分规则

745

主题

10920

帖子

6

粉丝