c++ - 检查序列中的位模式

标签 c++ c

所以基本上我需要检查某个位序列是否出现在其他位序列(32位)中。 该函数应采用 3 个参数:

  1. n 值的最右位。
  2. 一个值
  3. 应检查 n 位是否出现的序列

该函数必须返回所需序列开始的位数。检查 0x5 的最后 3 位是否出现在 0xe1f4 中的示例。

void bitcheck(unsigned int source, int operand,int n)
{
   int i,lastbits,mask;
   mask=(1<<n)-1;
   lastbits=operand&mask;

   for(i=0; i<32; i++)
   {
      if((source&(lastbits<<i))==(lastbits<<i))
          printf("It start at bit number %i\n",i+n);
   }
}

最佳答案

恐怕你的循环太过分了。例如,它可以在值 ~0 中“查找”位模式“0001”,该值仅由 1 组成。

这会做得更好(我希望):

void checkbit(unsigned value, unsigned pattern, unsigned n)
{
    unsigned size = 8 * sizeof value;
    if( 0 < n && n <= size)
    {
        unsigned mask = ~0U >> (size - n);
        pattern &= mask;

        for(int i = 0; i <= size - n; i ++, value >>= 1)
            if((value & mask) == pattern)
                printf("pattern found at bit position %u\n", i+n);
    }
}

关于c++ - 检查序列中的位模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808493/

相关文章:

c - 如何使用递归来确定图中两个节点之间是否存在路径?

c - 链表 - 如何在不移动头节点的情况下插入尾部

c - yyerror 的 Bison 冲突类型

c++ - 使用 stringstream 输入/输出一个 bool 值

c++ - Tensorflow:在 C++ 中打印张量的内容

c++ - 使用空的初始化列表直接初始化

c - SPOJ Prime Generator 的 C 代码有什么问题?

c++ - 有人给我一个使用 QVector::QVector(std::initializer_list<T> args) 的例子吗?

c++ - 将函数作为参数传递给模板返回值

c - 如何在类型定义上将预定义值分配给结构成员?