안에 지정된 비트 패턴을 찾는 bitpatSearch()
이라는 함수를 작성해야합니다. 함수는 3 개의 인수를 취해야합니다 : bitpatSearch(source, pattern, n)
. source
의 오른쪽에 n
비트를 검색하고 pattern
이어야하며 패턴이 시작되는 비트 수 (일치하는 경우 0 ~ 31 번째 비트 순서로 가정)와 일치하는 것이없는 경우 -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을 시도하십시오. –