bitpatSearch()
という名前の関数を書くと、unsigned int
の中に指定されたビットパターンを探します。関数は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を試してください。 –