我正在复习考试,但有一个练习题,我一直在坚持。
我需要写函数 find_sequence(unsigned int num, unsigned int patter) {}.
我试过比较num & (pattern << i) == (pattern << i)
和其他类似的东西,但它一直说有一种模式,但没有。我明白它为什么这样做,但我无法修复它。
在num
我使用的是unsigned int a = 82937
和我在寻找模式unsigned int b = 0x05
。
Pattern: 00000000000000000000000000000101
Original bitmap: 00000000000000010100001111111001
到目前为止的代码:
int find_sequence(unsigned int num, unsigned int pattern)
{
for (int i=0; i<32; i++)
{
if ((num & (pattern << i)) == (pattern << i))
{
return i;
}
}
return -9999;
}
int
main()
{
unsigned int a = 82937;
unsigned int b = 0x05;
printf("Pattern: ");
printBits(b);
printf("\n");
printf("Original bitmap: ");
printBits(a);
printf("\n");
int test = find_sequence(a, b);
printf("%d\n", test);
return 0;
}
这是我到目前为止所拥有的。这不断返回 3,我明白为什么,但我不知道如何避免它。
在这种情况下,您可以制作一个位掩码,将所有不需要的空格都设为 0,因此在这种情况下
模式:00000000000000000000000000000101
位掩码:00000000000000000000000000000111
所以在你正在查看的数字的情况下
原文:00000000000000010100001111111001
如果你和那个用这个位掩码结束
&之后的数字:00000000000000000000000000000001
并将新数字与您的模式进行比较,看看是否相等。
然后>>原号
原文:00000000000000010100001111111001
右移:00000000000000001010000111111100
并重复 & 并比较以检查序列中的下 3 个数字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句