J'ai été chargé d'écrire une fonction appelée bitpatSearch()
qui cherche un modèle de bit spécifié à l'intérieur d'un unsigned int
. La fonction doit prendre 3 arguments: bitpatSearch(source, pattern, n)
. Il doit rechercher l'entier source
pour les bits n
les plus à droite de pattern
et afficher le nombre de bits où le motif commence (en supposant 0 à 31 bits pour un entier de 32 bits) s'il y a correspondance et -1
s'il n'y a pas de correspondance.Comment puis-je corriger le code suivant concernant les trames de bits correspondantes?
Bien que l'exercice recommandé de rechercher à partir du bit le plus à gauche, mon code recherche à partir du plus à droite, comme je pensais que ce serait plus facile (comme je le pouvais ET valeurs avec 1
.) Cependant, quelque chose ne va pas, et je soupçonne que l'arithmétique derrière l'instruction return
peut être un problème, mais ne peut pas tout à fait comprendre.
Le programme semble toujours obtenir la position erronée, mais me dit toujours correctement s'il y a une correspondance.
#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;
}
Pouvez-vous donner des exemples d'entrées, de résultats attendus et de résultats réels? – kaylum
@kaylum Par exemple: bitpatSearch (243, 9, 4) sort une correspondance (qui est correcte), mais indique que c'est le 20ème bit, auquel le motif commence. Ce n'est pas le cas, car le motif commence au 27ème bit. –
Essayez count-n + 1 pour obtenir le bon résultat au moins dans ce cas. –