Мне поручено написать функцию под названием bitpatSearch()
, которая ищет заданный шаблон бита внутри unsigned int
. Функция должна принимать 3 аргумента: bitpatSearch(source, pattern, n)
. Он должен искать целое число source
для самых правых n
бит pattern
и выводить количество бит, где начинается шаблон (предположим, что порядок от 0 до 31-го порядка для 32-битного целого), если есть совпадение, и -1
, если нет совпадения.Как я могу исправить следующий код относительно совпадающих битовых шаблонов?
Несмотря на то, что упражнение рекомендуется искать с самого левого бита, мой код выполняет поиск с самого правого, так как я думал, что будет проще (поскольку я мог бы И с 1
.) Однако что-то не так, и я подозреваю, что арифметика за заявлением return
может быть проблемой, но не может понять это.
Программа, похоже, всегда ошибочна, но всегда правильно говорит, есть ли совпадение.
#include <stdio.h>
int bitpatSearch(unsigned int source, unsigned int pattern, int n){
unsigned int count, x, sourceCopy;
for(count = 0; count <= 32; ++count){ //loop for all possible shifts for a 32 bit integer
x = 0;
sourceCopy = source >> count;
while(((sourceCopy & 1) == (pattern & 1)) && (x != n)){
sourceCopy >>= 1;
pattern >>= 1;
++x;
}
if(x == n) //then there is a match
return 32 - (count + n); // I think the problem is here, with basic arithmetic
}
return -1;
}
Не могли бы вы предоставить несколько примеров ввода, ожидаемого результата и фактического результата? – kaylum
@kaylum Например: bitpatSearch (243, 9, 4) выводит совпадение (это правильно), но указывает, что его 20-й бит, с которого начинается шаблон. Это не так, поскольку шаблон начинается с 27-го бита. –
Попробуйте count-n + 1, чтобы получить правильный результат, по крайней мере, в этом случае. –