所以基本上我需要检查某个位序列是否出现在其他位序列(32位)中。 该函数应采用 3 个参数:
- n 值的最右位。
- 一个值
- 应检查 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/