打印

怎么做才最简单

[复制链接]
1687|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yufe|  楼主 | 2021-9-12 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做了一个测试的板子,要求对输入信号测试。以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。请问大虾们,我怎么做才最简单?

使用特权

评论回复
沙发
houcs| | 2021-9-12 11:05 | 只看该作者
将A先跟0X01求与,判断是否是1

使用特权

评论回复
板凳
jiahy| | 2021-9-12 11:08 | 只看该作者
谢谢,最好是有简单的程序提示。

使用特权

评论回复
地板
zhenykun| | 2021-9-12 11:11 | 只看该作者
可以考虑用移位来做,移位一次判断一下

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

使用特权

评论回复
5
chuxh| | 2021-9-12 11:17 | 只看该作者
假如结果存在数组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
liliang9554| | 2021-9-12 11:19 | 只看该作者
楼主试一下,不知可不可以

使用特权

评论回复
7
yufe|  楼主 | 2021-9-12 11:20 | 只看该作者
多谢楼上兄弟

使用特权

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

本版积分规则

983

主题

10170

帖子

1

粉丝